git不尊重git info exclude

时间:2017-07-06 20:22:09

标签: git github gitignore

我正在处理共享存储库,我想为自己排除某些目录下的所有文件。 所以我在rm

中输了一个条目
$GIT_ROOT/.git/info/exclude

在此之后我使用

删除了索引
/path/to/folder/

此后的git rm -r --cached /path/to/folder/* 显示已提交的已删除文件的长列表。 我提交了更改,直到这里一切都很好,因为我所做的任何更改都没有被git跟踪。但是我不能把它推到git status,因为这会搞砸其他开发人员的工作回购。 在此之后如果我从远程拉出来,它会向我显示合并冲突remote。使用modified by them/deleted by us它会再次开始跟踪文件夹。

这是不是可以实现,因为我无法推送到远程?

2 个答案:

答案 0 :(得分:1)

问题是您将文件提交为“已删除”。这意味着任何想要合并您的更改的人都会删除文件。此外,如果任何人(未合并您的更改)修改了这些文件,当您从其他开发人员合并更改时,您将遇到树冲突。在这种情况下你能做的最好的事情是告诉git 关心这些文件,同时将它们保留在项目中。这是通过git update-index --assume-unchanged

完成的

答案 1 :(得分:1)

更强大的解决方案是:

  • 将该文件夹移到回购站之外
  • 添加符号链接
  • 忽略带有git update-index --skip-worktree -- mysymlink
  • 的符号链接
  • 在移动的文件夹中添加.gitignore(使用' *'模式)
  • 将sparce结帐到位,以便获取/下载该特定文件夹。

.git/info/sparse-checkout内容:

*
!/path/to/mysymlink

mysymlink是我想忽略的文件夹的名称)

请参阅" git assume unchanged vs skip worktree - ignoring a symbolic link"

OP shshnk提到in the comments更简单的方法:

  

我能够使用稀疏结账来实现它   基本上我在.git/info/sparse-checkout文件中提到了您提到的格式的文件夹名称。现在git忽略这些文件夹中的文件。