2013-03-10 41 views
1

我在git上遇到问题。最近我犯了一个错误,并通过使用git add -f path/to/folder将一个目录添加到我的repo中。现在我努力忽略这个文件夹,但没有任何效果。到目前为止,我所做的:遇到“untracking”文件的问题(忽略对跟踪文件的进一步更改)

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

反而说文件出现等等等等,显示你的git状态的输出 – manojlds 2013-03-10 09:17:03

+0

也请包括你的'.gitignore'文件的内容,以及你用来'git rm'文件的确切命令,以及该命令的输出,如果有的话 – 2013-03-10 09:53:44

回答

2

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

将文件标记为“假设未发生变化”会忽略到一个跟踪文件的进一步变化 - 这是不是你说你想要的。 (注:这个问题最初说的OP要untrack文件)

使用git rm --cached只从索引中移除文件(临时区域),但并没有告诉Git的任何事情从现在开始忽略它,所以你在正确的轨道上,但你并没有走完全程。在删除文件(它现在再次未被跟踪,但Git总是告诉你关于未跟踪的内容)之后,必须另外为它添加一个条目到Git中的一个忽略文件中;然后,那么它不会再在状态消息中显示它。

要做到这一点,这个附加项文件.gitignore在回购的根(创建一个文件,如果不存在的话):

/full/path/to/my_file_name 

当然,请不要使用,从字面上但使用而是实际的路径。请注意,在这种情况下,首斜杠并不意味着“文件系统根”,而是“回购的根”。


编辑:您提供更多信息后,你的问题是更清晰。其实你不希望untrack一些文件(即从版本控制中删除),但只有无视进一步变更。

为此,“假设 - 不变”的确是正确的做法,但假定 - 不变不会在目录上递归地工作。这意味着您必须在每个您想要忽略其更改的文件上明确设置它。您可以在一个命令这样做:

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

如果有非常多的文件,这可能是照本宣科,而是因为你只似乎有大约15个文件,这将需要更长的时间才能使脚本(文件是在不同的目录中),而不是仅仅将路径复制粘贴到命令中。

+0

您好,谢谢您的回答。我已经有一个gitignore文件。但正如我所说,我添加了一些文件到回购(我用git add -f my_file)。但是现在即使他们在gitignore文件中,我也不可能删除它们,git会在任何时候进行更改。感谢帮助 – lkartono 2013-03-10 09:30:07

+0

一旦你拥有了'git rm'd,它们就不会被跟踪,'.gitignore'会被应用。如果Git不忽略它们,'.gitignore'中的条目可能与文件不匹配,或者您有其他干扰。 – 2013-03-10 09:31:41

+0

感谢您的回答。所以我没有检查我的gitignore和我的文件的路径,被忽略。我只是再次做了git rm file_name,如果我再次运行git status,我得到了:modified:path/my_file – lkartono 2013-03-10 09:36:16