我有一个网站项目,在某些目录中有超过 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 服务器上拉取时它不会删除它们。
有什么想法吗?
忽略整个目录是行不通的。我必须这样做:
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 文件的方法。
好的,我找到了解决方案。只需在子目录中创建一个新的存储库,父存储库将忽略它们。
创建子存储库是一种解决方案,但您应该将该子存储库设为子模块。
这样:
git submodule update
”的情况下查看您的主仓库(即不填写“files
”内容git submodule update
后的git submodule init
足以获取“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
检查文件路径中是否有空格并使用引号代替
正如 @dave1010 指出的,您必须标记每个单独的文件。 如果您没有
awk
和 bash
(例如 Windows),您可以使用以下 Perl 脚本:
foreach (split("\n",`git status`)) {
if (/^\s+deleted:\s+(.+)$/) {
`git update-index --assume-unchanged $1`;}}
任何适用于 Windows 的 Perl(例如 Strawberry Perl)都可以。您还可以为 Windows 编写 PowerShell 脚本,但 Perl 是通用的。