【发布时间】:2012-08-16 07:17:12
【问题描述】:
在本地 Git(克隆)存储库上工作,我创建了一个分支并将 .gitignore 文件放在其中以从 git commit 中排除几个目录。它工作得很好,但是在切换到不同的分支后,那些目录(被排除的目录)出现在其中(在不包括这些目录的分支上)。
这是正常的 Git 行为吗?如果是这样,避免上述问题的最佳做法是什么?
【问题讨论】:
标签: git branch git-branch gitignore
在本地 Git(克隆)存储库上工作,我创建了一个分支并将 .gitignore 文件放在其中以从 git commit 中排除几个目录。它工作得很好,但是在切换到不同的分支后,那些目录(被排除的目录)出现在其中(在不包括这些目录的分支上)。
这是正常的 Git 行为吗?如果是这样,避免上述问题的最佳做法是什么?
【问题讨论】:
标签: git branch git-branch gitignore
.gitignore 文件是存储库中的一个文件,就像其他任何文件一样。因此,如果您创建一个新的.gitignore 文件,将其提交到一个分支,然后切换到另一个分支,.gitignore 文件将消失。这是正常的。
【讨论】:
.gitignore 文件没有出现在“新”分支中。
.gitignore 会使这些目录在 git status 中显示为未跟踪。
您可以在其他三个位置指定忽略的文件。来自man gitignore(我排除了 CLI,因为它只与管道命令相关):
o Patterns read from $GIT_DIR/info/exclude.
o Patterns read from the file specified by the configuration variable core.excludesfile.
如果要全局忽略文件,请使用第二个。创建~/.gitignore 并在您的~/.gitconfig 中指定它:
git config --global core.excludesfile ~/.gitignore
我建议仅将其用于编辑器交换文件和.DS_Store 等。应在存储库级别指定特定于存储库的忽略文件。另外,当您向.gitignore 添加曾经被跟踪的文件时,不要忘记运行git rm --cached。
【讨论】:
当您从分支 A 移动到分支 B 时,您应该已经在该分支中提交了来自 A 的更改。
【讨论】: