Git 忽略已删除的文件。

24

我有一个网站项目,在一些目录中有超过50,000个对开发来说不重要的文件。

/website.com/files/1.txt
/website.com/files/2.txt
/website.com/files/3.txt
/website.com/files/etc.txt

/files目录中的内容已经在仓库中了。我想删除本地副本中/files目录下的所有文件,但我希望git忽略这些文件,这样在web服务器上执行pull操作时不会将它们删除。

有任何想法吗?

6个回答

15

忽略整个目录并没有起作用。 我不得不这样做:

for i in `git status | grep deleted | awk '{print $3}'`; do git update-index --assume-unchanged $i; done

5
我需要将 Git 版本 2.3.2 中的 $3 更改为 $2 - crizCraig

12

以下代码可在删除或修改文件时将其忽略,以便在执行 git status 时不显示。

git update-index --assume-unchanged dir-im-removing/

或特定的文件

git update-index --assume-unchanged config/database.yml

如何在 Git 中忽略修改但未提交的文件?

注意:上面提到的对于删除的文件,在执行 "git commit -am" 命令时,会包括该删除的文件!

一个适合我的解决方案是,不要删除文件,而是将其内容置为空。这就是我用来屏蔽 .htaccess 文件的方法。


3

好的,我找到了一个解决方案。只需在子目录中创建一个新的存储库,父级存储库将忽略它们。


2
这样做是可行的,但最好不要在多个项目中结束一堆分支/存储库。随着项目列表的增长,未来可能会变得很麻烦。我建议您更加熟悉.gitignore和索引管理工具。我的上面的答案中有一个不错的教程。尝试一次后,它真的很容易... - MaurerPower
@MaurerPower,虽然我赞赏你详细的回答,但是 git rm --cached 不符合我的需求。比如,如果我使用该命令,然后提交并推送。当我拉取到另一个服务器时,它仍会从该服务器中删除文件,即使它没有从原始服务器中删除它们。我做了一个小测试,以下是我的结果:http://pastebin.com/5X0t1KGs - Petah

3
创建子仓库是一种解决方案,但你应该将该子仓库设置为submodule
这样做的好处有:
  • 保持正常内容和“文件”内容之间的链接
  • 如果“文件”内容有所变化,你可以在主仓库中注册其演变
  • 你可以在不填充“文件”内容的情况下检出主仓库,而无需“git submodule update
  • 在部署时,在“git submodule init”之后执行“git submodule update”就足以获取正确版本的“files”内容。

1

如果只提交新增/修改的文件(而不是删除的文件),请执行以下操作:

git add . --ignore-removal
git commit -m "commit message"

0
for i in `git status | grep deleted | awk '{print $2}'`; do git update-index --assume-unchanged $i; done

适用于 git 2.25.1

如果遇到此问题:

致命错误:无法标记文件 PATH/TO/FILE

请检查文件路径中是否有空格,使用引号代替。


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