我在git上有一个问题。最近我犯了一个错误,并使用git add -f path / to / folder在我的repo中添加了一个目录。现在我正在努力忽略这个文件夹,但没有任何作用。到目前为止我做了:
git update-index --assume-unchanged path/to/folder
上面的命令完成了这项工作,但是一旦我使用chmod -R 777授予此文件夹权限,更改将再次出现在git状态中:
# 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/
但是一旦我这样做了,我就得到了上面你可以看到的日志未提交的更改提交:。我不希望跟踪这些更改,只是忽略。
仅供参考,以下是我在gitignore中的内容:
/app/tmp/*
答案 0 :(得分:2)
你似乎把不同的东西混在一起,因为你不知道他们做了什么。
将文件标记为“假设未更改”将忽略对跟踪文件的进一步更改 - 这不是您想要的。 (注意:问题最初是说OP想要删除文件)
使用git rm --cached
只会从索引(暂存区域)中删除一个文件,但是从现在开始不会告诉Git忽略它,所以你走的是正确的轨道,但是你并没有全力以赴方式。
删除文件后(它现在再次未被跟踪,但Git总是告诉你未跟踪的内容),你还需要在Git中为你的一个忽略文件添加一个条目;然后它不会再在状态消息中显示它。
要执行此操作,请将此条目附加到repo根目录中的文件.gitignore
(如果该文件尚不存在,则创建该文件):
/full/path/to/my_file_name
当然,不要按字面意思使用它,而是使用实际路径。请注意,在这种情况下,前导斜杠并不意味着“文件系统根”,而是“repo的根”。
修改:在您提供了更多信息后,您的问题就更加清晰了。您实际上并不想取消跟踪某些文件(即从版本控制中删除它们),而只是忽略进一步对它们的更改。
为此,“假设未改变”确实是正确的方法,但假设 - 未改变不会在目录上递归工作。这意味着您必须在要忽略其更改的每个文件上明确设置它。您可以在一个命令中执行此操作:
git update-index --assume-unchanged -- file1 file2 file3 ...
如果有很多文件,这可能是脚本化的,但是因为你似乎只有大约15个文件,所以制作脚本(文件在不同的目录中)需要更长的时间而不是只复制粘贴进入命令的路径。