git不会忽略2个专门命名的文件


70

我想从提交中自动排除2个文件,这些文件是git存储库的一部分,但有一些更改,不应包含在github存储库中,因为它们有一些更改仅对我的本地系统有意义,而对其他系统没有意义开发人员。

我添加了它们,.git/info/exclude希望git理解他不应该对它们进行更改:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
a.conf
b.conf
# *~

git status仍将其列为提交阶段:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   build/conf/a.conf
#   modified:   build/conf/b.conf
#

我不想每次提交都定期取消登台(一次我可能会忘记),我该怎么做?


2
为什么不.gitignore呢?
maverik 2012年

7
您不能忽略正在跟踪的文件。您可能需要找到另一种管理本地系统特定信息的方式,例如拥有“模板”文件来生成或手动编辑配置文件。
CB Bailey 2012年

2
@maverik:如果exclude不起作用,.gitignore也不会。用例exclude是该信息在本地.gitignore可以被检入和共享。exclude当您不想炸毁炸弹时,拿起当地的东西.gitignore。想象一个大项目,每个开发人员都将他的排除项输入到其中.gitignore。它将变得无法管理...
eckes 2012年

Answers:


166

您要忽略的是跟踪文件的更改。无论用还是用,都不能正确实现(如查尔斯·贝利 所说)。.gitignore.git/info/exclude

您需要使用git update-index

git update-index --assume-unchanged build/conf/a.conf
git update-index --assume-unchanged build/conf/b.conf

将实现您想要的:文件始终假定为不变。

如果要再次跟踪这些文件中的更改,请使用 --no-assume-unchanged

最后,如果您想知道当前处于该--assume-unchanged模式的文件,请向git询问

git ls-files -v | grep -e "^[hsmrck]"

对我来说很棒!
Gustyn '17

此解决方案是否绑定到分支?让我们在branch1中将文件1和文件2标记为“假定不变”。然后结帐到branch2。这些文件是否也标记为“假定不变”?
nespapu

@Leo无法制作文件是因为尚未跟踪文件。您可以简单地转到.git / info / exclude并添加要排除的路径。
奥古斯都·弗朗西斯


1
@eckes无论如何使此功能适用于所有分支机构?如果我使用命令,请进行更改,我将无法切换分支,并给我错误以提交或存储它们
Arvand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.