1

我有一个关于 git 的问题。最近我犯了一个错误,并使用 git add -f path/to/folder 在我的 repo 中添加了一个目录。现在我非常努力地忽略这个文件夹,但没有任何效果。到目前为止,我做到了:

git update-index --assume-unchanged path/to/folder

上面的命令完成了这项工作,但是一旦我使用 chmod -R 777 授予该文件夹的权限,更改就会再次出现在 git status 中:

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_attachments
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_list
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_signatures
#   modified:   app/tmp/cache/models/myapp_cake_model_default_contractsign_users
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_dev_eng
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_dev_fre
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_dev_spa
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_eng
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_fre
#   modified:   app/tmp/cache/persistent/myapp_cake_core_cake_spa
#   modified:   app/tmp/cache/persistent/myapp_cake_core_default_eng
#   modified:   app/tmp/cache/persistent/myapp_cake_core_default_fre
#   modified:   app/tmp/cache/persistent/myapp_cake_core_default_spa
#   modified:   app/tmp/cache/persistent/myapp_cake_core_file_map
#   modified:   app/tmp/cache/persistent/myapp_cake_core_method_cache
#   modified:   app/tmp/logs/error.log
#
no changes added to commit (use "git add" and/or "git commit -a")

编辑:也许我之前有点不清楚。所以基本上对于我的项目,我希望添加它们文件夹的当前内容tmp/,但 git 不再跟踪更改。所以我这样做了:

$ git update-index --assume-unchanged app/tmp/
Ignoring path app/tmp/

但是现在,为了让我的应用程序再次运行,我需要为文件夹中的文件提供写权限,所以我做了:

sudo chmod -R 777 app/tmp/

但是一旦我这样做了,我就会在Changes not staged for commit:下看到你可以在上面看到的日志。我不希望跟踪这些更改,只是忽略。

仅供参考,这是我的 gitignore 中的内容:

/app/tmp/*
4

1 回答 1

2

你似乎把不同的东西混合在一起,因为你不知道它们做什么。

将文件标记为“假定未更改”将忽略对跟踪文件的进一步更改——这不是你所说的你想要的。(注意:问题最初是说 OP 想要取消跟踪文件)

使用git rm --cached只从索引(暂存区)中删除一个文件,但不会告诉 Git 从现在开始忽略它的任何事情,所以你走在了正确的轨道上,但你并没有一路走好。

删除文件后(它现在再次未跟踪,但 Git 总是会告诉您未跟踪的内容),您必须在 Git 中的一个忽略文件中另外添加一个条目;那么它将不会在状态消息中再次显示它。

为此,请将此条目附加到存储.gitignore库根目录中的文件(如果该文件尚不存在,则创建该文件):

/full/path/to/my_file_name

当然,不要直接使用它,而是使用实际路径。请注意,在这种情况下,前导斜杠不是指“文件系统根”,而是“repo 的根”。


编辑:提供更多信息后,您的问题就更清楚了。您实际上并不想取消跟踪某些文件(即从版本控制中删除它们),而只是忽略对它们的进一步更改。

为此,“assume-unchanged”确实是正确的做法,但假设-unchanged 不能递归地在目录上工作。这意味着您必须在要忽略其更改的每个文件上显式设置它。您可以在单个命令中执行此操作:

git update-index --assume-unchanged -- file1 file2 file3 ...

如果有很多文件,则可以编写脚本,但是由于您似乎只有大约 15 个文件,因此制作脚本(文件位于不同的目录中)比您将路径复制粘贴到一个命令。

于 2013-03-10T09:28:19.687 回答