更新所有分支中的gitignore更改



在我的案例中,我经常遇到这样的情况:

  1. 我得到了development分支,它是所有功能分支的父分支
  2. 将一些资产导入功能分支,并忽略一些文件我将其添加到.gitignore文件
  3. 我将这个新功能与更新的.gitignore文件合并以开发分支

很常见,但我仍然希望在本地保留被忽略的文件,问题是当我转移到任何其他功能分支时,我无法将开发合并到它中,因为项目中有被忽视的文件。

有什么方法可以强制所有分支中的update.gitignore更改吗?

您的.gitignore文件是一个文件,您可以从工作树中使用和编辑它。这样的文件不在分支中,在Git中:文件在commit。(任何一个给定的提交都可能——也可能不——包含在一个或多个分支中,这就是分支名称进入这张图的方式。(一旦你意识到这一点,再加上no提交一旦完成,就可以更改——甚至Git本身也不能更改1——你会发现这里没有捷径:

  • 对于每个不同的分支提示提交,您必须签出该分支,更新.gitignore,添加并提交
  • 如果多个分支名称共享tip,则可以快速更新其他每个分支名称
  • 重复此操作,直到所有不同的分支提示提交都得到更新

虽然.gitignore文件没有捷径,但.gitignore文件并不是排除文件的唯一方法:还有.git/info/exclude和您的个人排除文件(例如,~/.gitignore$XGD_CONFIG_HOME/git/ignore(。由于这不是一个工作树文件,当你选择其他提交来处理时,它不会被交换。但除了编辑器备份之类的东西(例如,"忽略我所有工作树中的所有*~文件,因为Emacs将其用作备份名称"(,这往往适用性有限。

正如斯维亚托斯拉夫·米勒在一篇评论中所暗示的那样,如果你能构建成——";忽略">2一些规则重复形式的文件名,如*.localignoreme-*,您可以在这里使用.gitignore模式匹配技巧来获得良好效果。或者,考虑使用git worktree或多个存储库,这样就不必不断地将工作树从一个分支名称交换到另一个分支。


1注意,git commit --amend是一个谎言:它不会更改提交,而是进行替换的提交。原始承诺未经修订;相反,最初的提交从分支的末尾开始,而新的提交则添加到分支的末尾,因此看起来提交被修改了。但是,任何通过任何其他使用原始提交的哈希ID的人都意味着仍然有原始提交。

注意,在排除文件(例如.gitignore.git/info/exclude(中列出一个文件实际上并不使成为文件";忽略";。它只是避免了git status抱怨文件未被跟踪,并禁止git add将文件添加到Git的索引中。某个文件的副本在Git的索引中的存在定义了该文件是否"是";"跟踪";,如果文件被跟踪,则将其列在.gitignore中不会改变该状态。

最新更新