我有一个网站项目,在一些目录中有超过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操作时不会将它们删除。
有任何想法吗?
我有一个网站项目,在一些目录中有超过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操作时不会将它们删除。
有任何想法吗?
忽略整个目录并没有起作用。 我不得不这样做:
for i in `git status | grep deleted | awk '{print $3}'`; do git update-index --assume-unchanged $i; done
以下代码可在删除或修改文件时将其忽略,以便在执行 git status 时不显示。
git update-index --assume-unchanged dir-im-removing/
或特定的文件
git update-index --assume-unchanged config/database.yml
注意:上面提到的对于删除的文件,在执行 "git commit -am" 命令时,会包括该删除的文件!
一个适合我的解决方案是,不要删除文件,而是将其内容置为空。这就是我用来屏蔽 .htaccess 文件的方法。
好的,我找到了一个解决方案。只需在子目录中创建一个新的存储库,父级存储库将忽略它们。
.gitignore
和索引管理工具。我的上面的答案中有一个不错的教程。尝试一次后,它真的很容易... - MaurerPowergit rm --cached
不符合我的需求。比如,如果我使用该命令,然后提交并推送。当我拉取到另一个服务器时,它仍会从该服务器中删除文件,即使它没有从原始服务器中删除它们。我做了一个小测试,以下是我的结果:http://pastebin.com/5X0t1KGs - Petahgit submodule update
”git submodule init
”之后执行“git submodule update
”就足以获取正确版本的“files
”内容。如果只提交新增/修改的文件(而不是删除的文件),请执行以下操作:
git add . --ignore-removal
git commit -m "commit message"
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
请检查文件路径中是否有空格,使用引号代替。
$3
更改为$2
。 - crizCraig