2010-06-03 218 views
27

我的.gitignore文件被忽略,应该忽略的文件仍然可见。.gitignore不会忽略文件

[email protected] ~/workdir % git status 
# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: .htaccess 
#  modified: application/controllers/statistics.php 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
[email protected] ~/workdir % cat .gitignore 
.htaccess 
application/config/config.php 
application/config/database.php 
[email protected] ~/workdir % 

这些文件在版本控制中,但我不想推动明智的更改。 git rm ...不是一个选项,因为这些文件应该在版本控制1(与文件中的其他设置)。我只是不想推动我对这些文件的更改。

+0

删除您回购的东西,也许这篇文章可以帮助你http://stackoverflow.com/questions/1139762/gitignore-file-not-ignoring试试吧! – 2013-05-10 04:59:19

回答

7

在git中忽略文件并不意味着你不会他们。这意味着你不会版本控制他们。如果你不想推,那么我建议你创建一个本地分支,它将包含本地机器的东西,然后将必要的更改合并到你将推送到远程的分支。

我想你已经add编辑你的文件,现在试图忽略它们。

+2

我现在使用的另一种方式是存储本地更改并在合并/重新绑定后弹出存储。 – Fu86 2010-06-04 23:47:12

+0

我在忽略列表上有这个文件,并以某种方式“添加” - 它。好的电话@Naufal – 2011-11-02 19:21:52

+1

没有真正回答这个问题,但@ anybug的答案。 – MikeSchinkel 2014-02-02 19:07:57

2

这一个窃听我好几天。 .htaccess文件已经在版本控制下并且已被修改。

4

看来.htaccess文件已被添加到版本控制。您需要先将其删除,然后才能被忽略。这可以使用git rm

+0

我知道,但我不想删除该文件。我只想忽略更改 – Fu86 2010-06-03 10:38:38

+0

如果在版本控制中存在.htaccess版本,但您不想提交任何更改,.gitignore将不起作用。就我所知,这没有选择。只是不要将该文件添加到提交。 – Marc 2010-06-03 10:42:41

+4

你可以使用git rm --cached将文件保留在目录中,但将其从索引中删除 – 2010-06-03 11:11:01

13

既然你想:

  • 保持.htaccess在GIT回购(无git rm
  • 本地敏感数据在它

使用filter driver这将:

  • d uring结账阶段,完成.htaccess私人数据
  • 在提交阶段从所有的敏感数据清理.htaccess

content filter driver

然后你可以版本加密的文件,你的污迹脚本:

  • 被解密,以完成经典
  • 使用的唯一一个(推/拉).htaccess文件。

您可以在不会推送的特殊分支中加密敏感数据。
即使您以某种方式推送该文件,损坏也会受到限制,因为只有您的工作站具有解密所述文件所需的专用密钥。

+0

为漂亮的图片和过滤器驱动程序+1。我想知道你什么时候会想到这是一个版本控制问题。 :) – 2010-06-03 10:59:11

+0

+1用于自动化。我会建议'git update-index --assume-unchanged',它可能仍然是一个简单的解决方案,但是这种自动化非常棒。 – 2010-06-03 12:12:16

+0

+1因为纯粹的事实,任何人都知道如何使用这些神秘的git东西。这不是我想要的,但仍然是! – PapaFreud 2011-04-21 07:29:57

45

我有同样的问题:我想每个存储库不同的.htaccess文件,然后我不能,因为htaccess文件已被添加到存储库。它现在正在工作,我可以从任何版本更改任何.htaccess文件,而不会让git推送它们。Marc说得对:“你需要先删除它,然后才能被忽略,这可以使用git rm来完成”。

我继续在这个顺序:

  • 备份您的.htaccess地方
  • 文件使用Git RM的.htaccess
  • 提交此变更(删除的.htaccess)
  • 推它删除.htaccess文件(git push)

这会明显的移除你的.htaccess文件

  • 然后编辑的.gitignore并添加/.htaccess
  • 提交,然后将其推
  • 通过恢复以前的备份

,那么你就大功告成了重新.htaccess文件:无论你更改进入.htaccess不会再被推送。困难的部分是以下步骤订购...

希望这是明确的

+3

+1分步骤子弹和超清晰说明 – 2013-01-22 05:02:35

+0

正斜杠!这让我很生气,我只是'.htaccess'在我的gitignore文件 – lxm7 2015-02-18 09:44:20

30

anybug's steps noted here我的git还在不停的.htaccess的轨道,这有助于:

git update-index --assume-unchanged .htaccess 

要恢复:

git update-index --no-assume-unchanged .htaccess 
+0

这很完美,谢谢! – Kristian 2012-06-27 17:51:49

+0

对我来说最好的解决方案 – 2014-04-08 14:06:57

+2

你可以通过 'git update-index --no-assume-unchanged'恢复那个效果。 – rahmanisback 2014-12-08 21:43:23

8

假设以下是.gitignore文件的内容。这里,.htaccess位于项目的根目录下。

/.htaccess 
application/config/config.php 
application/config/database.php 

让我们运行下面的命令忽略.htaccessconfig.phpdatabase.php文件。

[email protected]:work-dir$ git update-index --assume-unchanged .htaccess 
[email protected]:work-dir$ git update-index --assume-unchanged application/config/config.php 
[email protected]:work-dir$ git update-index --assume-unchanged application/config/database.php 

如果你想重新开始跟踪它:

[email protected]:work-dir$ git update-index --no-assume-unchanged path/to/file 

例如

[email protected]:work-dir$ git update-index --no-assume-unchanged .htaccess 
+0

这对我有用。我的代码在项目的'/ code /'目录中。 '$ git update-index --assume-unchanged code/.htaccess'。 SourceTree不再追踪它。 – 2014-05-05 12:46:30

+0

这是唯一对我有用的东西。让我发疯,谢谢 – jamescampbell 2016-06-22 02:51:57

3

我一直这样做。我开始在我的回购配置文件,然后决定我不希望他们在那里。

您可以通过使用

git rm --cached <<filename>>