遇到“未跟踪”文件的问题(忽略对跟踪文件的进一步更改)

时间:2013-03-10 09:14:17

标签: git gitignore

我在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/*

1 个答案:

答案 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个文件,所以制作脚本(文件在不同的目录中)需要更长的时间而不是只复制粘贴进入命令的路径。

相关问题