Git 忽略已删除的文件

问题描述 投票:0回答:7

我有一个网站项目,在某些目录中有超过 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 服务器上拉取时它不会删除它们。

有什么想法吗?

git delete-file ignore
7个回答
16
投票

忽略整个目录是行不通的。我必须这样做:

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

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
投票

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


3
投票

创建子存储库是一种解决方案,但您应该将该子存储库设为子模块

这样:

  • 您在正常内容和“文件”内容之间保留链接
  • 如果“文件”内容有一天发生变化,您可以在主存储库中注册其演变
  • 您可以在没有“
    git submodule update
    ”的情况下查看您的主仓库(即不填写“
    files
    ”内容
  • 部署时,
    git submodule update
    后的
    git submodule init
    足以获取“
    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

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


0
投票

正如 @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 是通用的。

© www.soinside.com 2019 - 2024. All rights reserved.