Git 将我的许可证和自述文件列为已删除,但它们仍然存在?

Git 将我的许可证和自述文件列为已删除,但它们仍然存在?

谢谢阅读!

我开始设置我的使用 git 和 GitHub 进行点文件配置并遇到了一个问题:我使用 my$HOME作为我的 git 工作树,并通过使用别名将.git-directory 放在我的 -directory 中:$HOME/.dotfiles

alias dotfiles="git --git --git-dir=$HOME/.dotfiles/.git/ --work-tree=$HOME"

我创建了一个GitHub 上的新存储库并添加了执照自述文件那里。当我像这样克隆我的存储库时:

git clone \<url to the repository\> $HOME/.dotfiles

执照自述文件位于.dotfiles- 目录中,但命令:

dotfiles status

将它们列为已删除

不要想要执照自述文件在我的$HOME-目录中。它们应该保留在 - 目录中的位置$HOME/.dotfiles

对此我能做什么?

答案1

实际上可以在 github 和 gitlab 会尊重的 master 分支中拥有 LICENSE 和 README 文件(显示在 github 或 gitlab 中的项目主目录中),但不能在你的主目录中。最简单的解决方案是将 README 放在.github项目主文件夹中,但它仅适用于github

但我实际上是在 gitlab 和 github 的项目主页上显示 LICENSE 和 README 的:

1.启动一个裸git存储库或复制现有存储库

首先为 xadf 启动一个裸 git 存储库,并在没有自述文件和/或许可证的情况下进行初始提交,并创建您的别名。别名可以是任何你想要的(例如dotfiles),但我使用gitdf它是为了更容易输入。

# Initialize a bare git directory
git init --bare $HOME/.dotfiles

# Sets up an alias so you don't have to type long commands
alias gitdf='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'

# Adds a remote where you'd push your changes
gitdf remote add origin [email protected]:yourusername/dotfiles.git

# Do not display untracked files (it would be a ton of untracked files in an actual home tree
gitdf config status.showUntrackedFiles no

或者,如果您已经有一个 dotfiles 存储库,您可能希望将其复制到您的家中:

# Clone existing repo with separate git directory (here it is ~/.dotfiles), and the work tree in a separate, temporary directory .dotfiles-temp
git clone --separate-git-dir=$HOME/.dotfiles https://github.com/yourusername/dotfiles.git .dotfiles-temp

# Copy the content of the temporary work tree to ~/
rsync --recursive --verbose --exclude '.git' .dotfiles-temp/ $HOME/

# Remove the temporary work tree
rm --recursive .dotfiles-temp

# Sets up an alias so you don't have to type long commands
alias gitdf='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'

# Sets remote directory
gitdf remote set-url origin [email protected]:yourusername/dotfiles.git

请注意,您可能需要将别名添加到您的别名中,.bashrc以便每次登录时该别名都会保留。

2.然后我们创建一个分支

这是您在真实的主树中查看的实际分支。说吧,一个home分支。

# Make branch 'home'
gitdf checkout -b home

# You may need to also add the branch to gitlab or github
gitdf push --set-upstream origin home

3.在分支master中,添加README和LICENSE

然后在分支主控中,如果您愿意,您可以安全地添加自述文件和许可证。这仅用于在 gitlab 或 github 的项目主页中提供信息。该文件不会出现在分支主目录的提交历史记录中,并且永远不应该在您的本地分支中引入。

# Switch back to branch 'master'
gitdf checkout master

# Make readme and license
touch ~/LICENSE ~/README.md

# Add them to your bare git repo
gitdf add LICENSE README.md

# Commit
gitdf commit

# Push
gitdf push

4. 仅对实际工作分支进行更改

然后返回到分支home,这应该是点文件的实际签出分支,其中自述文件或许可证文件永远不会出现在其提交历史记录中。

gitdf checkout home

帖子设置

home之后,对配置文件的更改仅从分支或从分支派生的任何分支完成home。您可能需要偶尔(或定期)将它们合并到 master 中:

# Go to branch master
gitdf checkout master

# merge branch home to branch master
gitdf merge home

# push to remote
gitdf push

由于branch home没有LICENSEREADME.md,合并不会产生冲突。

但你不应该以相反的方式这样做(例如,从分支home, gitdf merge master),因为它也会将LICENSE和添加README.md到你的工作主目录中。

每个特定分支中的多个特定于机器的配置

作为额外的好处,您可能希望派生分支home用于其他特定用途(例如,在work应该基于home但具有特定于工作的配置的分支中):

# Check if we're in branch home
gitdf status -sb

# Checkout to branch home if we are not
gitdf checkout home

# Note that the -b flag means make branch if it does not exist
gitdf checkout -b work

# Add new branch to remote
gitdf push --set-upstream origin work

# Configure or add work-specific changes then commit
gitdf add .config/work/related/configfile
gitdf commit

# Push to remote
gitdf push

稍后,当您在分支中进行更改时home,您所要做的work就是将其也包含在分支中:

# move to branch work
gitdf checkout work

# merge branch home to branch home
gitdf merge home

# Push to remote
gitdf push

如果您有其他分支(全部从 分支home,这意味着您必须从分支开始home并创建新分支),例如laptop,您也可以在必要时将 home 合并到它们。home如果需要,您还可以合并在那里所做的更改。

不过,实际上,我建议先创建共享配置home,然后将它们合并到必要的分支和master.

因此,您可以像这样可视化合并方向:

master < home <> work
              <> laptop

仅将家庭合并到主机、工作或笔记本电脑,或从工作、笔记本电脑合并到家庭,但绝不将主机合并到家庭。

实际生活应用

作为一个无耻的插件,你可以看到我如何在我的中设置这个 git 别名方法点文件存储库。它是上述步骤的更完善且适度复杂的实现。要安装它,我所要做的就是下载安装程序和控制器脚本(xadf),使其可执行,并将其放置在我的路径中的某个位置。

# Make directory, if it isn't present already
mkdir -p ~/.local/bin

# Download the executable into your local bin directory
wget -O ~/.local/bin/xadf https://gitlab.com/heno72/xadf/-/raw/master/.local/bin/xadf

# Make it executable
chmod +x ~/.local/bin/xadf

# Export path to local bin if it isn't set up already
PATH=~/.local/bin:$PATH

# Install xadf minimally
xadf --minimal-install

该脚本可以处理步骤 1(复制),签出到工作分支(默认为trunk,相当于home上面示例中的分支),包括生成配置文件以供将来使用(别名和一些函数)~/.config/xadf

# initialize, configure, load, and manage
xadf --init-bare --seat ~/.dotfiles
xadf --custom-install --seat ~/.dotfiles
. ~/.bashrc
xadf config status.showUntrackedFiles no

或者,如果您已经在远程拥有自己的裸 git 存储库:

# Clone and configure from a custom url, load, and manage
xadf -i -s [email protected]:heno72/xadf-gb.git --seat ~/.dotfiles
. ~/.bashrc
xadf status -sb

如果您的主文件夹中已经有裸 git 目录,则可以使用 xadf 来管理它们:

xadf --custom-install --seat ~/.dotfiles
. ~/.bashrc

安装后(并且获取了 .bashrc),我可以像任何 git 命令一样使用该脚本:

# Adds a new config file to tracked file
xadf add .config/new/config/file

# Commit changes
xadf commit

# Push changes to remote
xadf push

# Change working branch
xadf checkout newbranch

或者一些预定的动作:

xadf -l         # list all tracked files
xadf -l .config # list all tracked files in ~/.config

相关内容