git 不遵守 git 信息排除
git not honoring git info exclude
我正在处理一个共享存储库,我想为我自己排除某个目录下的所有文件。
所以我在 $GIT_ROOT/.git/info/exclude
中输入了一个条目
/path/to/folder/
之后我使用
删除了索引
git rm -r --cached /path/to/folder/*
A git status
在此之后显示一长串已删除的文件暂存以供提交。
我提交了更改,直到这里一切都很好,因为我所做的任何更改都没有被 git 跟踪。但我不能将相同的内容推送到 remote
,因为这会扰乱其他开发人员的回购工作。
在此之后,如果我从远程拉出,它会显示合并冲突 modified by them/deleted by us
。并使用 git reset --hard origin/<branch_name>
它再次开始跟踪文件夹。
难道不能推送到远程所以不能实现吗?
问题是您将文件提交为 "removed"。这意味着任何想要合并您的更改的人都将删除文件。此外,如果任何人(尚未合并您的更改)修改了这些文件,当您合并来自其他开发人员的更改时,您将遇到树冲突。在这种情况下,你能做的最好的事情就是告诉 git 到 不要 关心那些文件,同时将它们保留在项目下。这是通过 git update-index --assume-unchanged
完成的
更稳健的解决方案是:
- 将该文件夹移出您的存储库
- 添加符号链接
- 忽略带有
git update-index --skip-worktree -- mysymlink
的符号链接
- 在移动的文件夹中添加一个
.gitignore
(使用“*
”模式)
- 放置一个 sparce checkout 以便不fetch/download那个特定的文件夹。
.git/info/sparse-checkout
内容:
*
!/path/to/mysymlink
(mysymlink
是我要忽略的文件夹的名称)
在“git assume unchanged vs skip worktree - ignoring a symbolic link”查看更多信息
OP shshnk mentions 更简单的方法:
I was able to implement it using just sparse-checkout.
Basically I mentioned the name of the folders in the format mentioned by you in .git/info/sparse-checkout
file. Now git
ignores the files in these folders.
我正在处理一个共享存储库,我想为我自己排除某个目录下的所有文件。
所以我在 $GIT_ROOT/.git/info/exclude
/path/to/folder/
之后我使用
删除了索引git rm -r --cached /path/to/folder/*
A git status
在此之后显示一长串已删除的文件暂存以供提交。
我提交了更改,直到这里一切都很好,因为我所做的任何更改都没有被 git 跟踪。但我不能将相同的内容推送到 remote
,因为这会扰乱其他开发人员的回购工作。
在此之后,如果我从远程拉出,它会显示合并冲突 modified by them/deleted by us
。并使用 git reset --hard origin/<branch_name>
它再次开始跟踪文件夹。
难道不能推送到远程所以不能实现吗?
问题是您将文件提交为 "removed"。这意味着任何想要合并您的更改的人都将删除文件。此外,如果任何人(尚未合并您的更改)修改了这些文件,当您合并来自其他开发人员的更改时,您将遇到树冲突。在这种情况下,你能做的最好的事情就是告诉 git 到 不要 关心那些文件,同时将它们保留在项目下。这是通过 git update-index --assume-unchanged
更稳健的解决方案是:
- 将该文件夹移出您的存储库
- 添加符号链接
- 忽略带有
git update-index --skip-worktree -- mysymlink
的符号链接
- 在移动的文件夹中添加一个
.gitignore
(使用“*
”模式) - 放置一个 sparce checkout 以便不fetch/download那个特定的文件夹。
.git/info/sparse-checkout
内容:
*
!/path/to/mysymlink
(mysymlink
是我要忽略的文件夹的名称)
在“git assume unchanged vs skip worktree - ignoring a symbolic link”查看更多信息
OP shshnk mentions
I was able to implement it using just sparse-checkout.
Basically I mentioned the name of the folders in the format mentioned by you in.git/info/sparse-checkout
file. Nowgit
ignores the files in these folders.