【问题标题】:Why doesn't .gitignore work across branches?为什么 .gitignore 不能跨分支工作?
【发布时间】:2012-08-16 07:17:12
【问题描述】:

在本地 Git(克隆)存储库上工作,我创建了一个分支并将 .gitignore 文件放在其中以从 git commit 中排除几个目录。它工作得很好,但是在切换到不同的分支后,那些目录(被排除的目录)出现在其中(在不包括这些目录的分支上)。

这是正常的 Git 行为吗?如果是这样,避免上述问题的最佳做法是什么?

【问题讨论】:

    标签: git branch git-branch gitignore


    【解决方案1】:

    .gitignore 文件是存储库中的一个文件,就像其他任何文件一样。因此,如果您创建一个新的.gitignore 文件,将其提交到一个分支,然后切换到另一个分支,.gitignore 文件将消失。这是正常的。

    【讨论】:

    • 我指的是排除目录,它们出现在“新”分支中,它们是在“旧”分支上创建的。 .gitignore 文件没有出现在“新”分支中。
    • 我不确定我是否理解。如果这些目录尚未添加到存储库中,那么 Git 将不会触及它们。因此,当您切换分支时,这些目录仍然存在,但是在另一个分支上缺少 .gitignore 会使这些目录在 git status 中显示为未跟踪。
    【解决方案2】:

    您可以在其他三个位置指定忽略的文件。来自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

    【讨论】:

      【解决方案3】:

      当您从分支 A 移动到分支 B 时,您应该已经在该分支中提交了来自 A 的更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 1970-01-01
        • 2011-08-25
        • 2016-11-19
        • 1970-01-01
        • 2011-07-27
        相关资源
        最近更新 更多