使用本地更改的排除项来忽略已提交的GIT文件

3
我克隆了一个远程仓库,里面有三个文件。
file1.txt 
file2.txt
file3.txt

我在本地机器上对file3.txt做了修改,不希望这些修改传到远程仓库中,反之亦然。

我了解到使用.gitignore是无法忽略已提交和已跟踪的文件的。

因此,我决定在.git/info/exclude文件中添加以下行:

exclude file

file3.txt

但是,对file3.txt所做的更改仍被显示为未暂存的文件。我希望忽略这个file3.txt文件并防止它在提交和暂存中更新,也需要防止从远程仓库更新file3.txt。

非常感谢任何帮助。


.git/info/exclude的作用与.gitignore文件完全相同,只是前者不需要在工作目录中。 - poke
2个回答

9
我看到使用.gitignore不可能忽略已经提交和被跟踪的文件。 但是,可以通过.gitignore或.git/info/exclude来实现。 您只需要首先记录该文件的删除。
git rm --cached file3.txt

一旦文件从缓存中删除(而不是从硬盘中删除),git status 就不应该显示它(因为它已经在 .gitignore 中)。
参见 "git rm --cached x” vs “git reset head — x”?": "cache",也称为 "index" 或 "staging area",仅从索引中删除文件并将其保留在您的工作副本中。 file3.txt 将不再在仓库中进行版本控制。一旦删除提交并推送,这将传播到其他克隆。
如果你只需要暂时忽略文件,请参考本地忽略文件
git update-index --assume-unchanged -- file3.txt

请注意,这完全不涉及.gitignore
停止本地忽略更改的方法如下:
git update-index --no-assume-unchanged -- file3.txt

1
@MohamedHussain 是的,在你提交并推送删除file3.txt后,它会影响其他存储库。 - VonC
1
@MohamedHussain 我刚刚编辑了答案,指出了另一种方法。 - VonC
1
@MohamedHussain 如果要忽略一个文件夹,可以尝试使用 git update-index --no-assume-unchanged -- afolder/(注意最后的 '/')。如果不起作用,则必须对文件夹中的所有文件执行此操作:https://dev59.com/EGct5IYBdhLWcg3wLqjw#12288918 - VonC
1
@MohamedHussain 双短横线(--)只是用来将命令和选项与参数(文件或文件夹)分开的:请参见https://dev59.com/iXM_5IYBdhLWcg3w3nRs#1192194。 - VonC
1
@MohamedHussain 好的。至少 https://dev59.com/EGct5IYBdhLWcg3wLqjw#12288918 应该可以工作。 - VonC
显示剩余12条评论

0

编辑.gitignore文件,添加以下行:

file3.txt


.gitignore文件本身是被跟踪的,我不想在.gitignore中包含file3.txt文件。我只是为了本地修改了file3.txt文件。如果我在其他团队成员的克隆中添加.gitignore文件,那么这个文件也会被排除在外。我不希望发生这种情况,而且我在网上读到说使用.gitignore无法忽略已跟踪的文件。 - Mohamed Hussain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接