2011-10-29 37 views
3

我以为我已经想通了,但最近尝试失败。Git忽略不工作,我不明白

我需要提交一个文件,然后提交后忽略任何后续的repo提交。

可以说文件是example.txt。

我提交了对example.txt的更改并将它们推送到github。然后我并添加example.txt并保存。
我然后使用git rm --cached example.txt
然后git add .gitignore提交 - >推

在该步骤中的问题是一个git状态被示出作为example.txt的删除因而提交/推从远程回购删除它。

我已经尝试了几个变体,创建了.gitignorerm --cached,它删除了文件或不忽略它并提交不需要的更改。

寻找洞察确切的过程忽略已提交的文件而不删除它们。

+0

你真的想做什么?为什么你想在源代码管理中不是本地的文件? –

+0

这是一个服务器配置文件(数据库),实际上直接从github服务,但本地主机数据库和远程数据库有diff参数,没有办法改变这是如何工作的,除非我定义了两个数据库,我认为它会告诉git在第一次提交之后忽略它,并保持远程版本不变。 – Wyck

回答

7

你知道git rm --cached example.txt将从索引中移除文件并将其保存在工作目录中。然后,当您提交时,除了您添加的.gitignore文件外,您还在提交文件的删除。因此,当您推送文件时,它将从回购库中删除。

此外,您不能忽略使用gitignore.跟踪文件的更改,而是可以尝试执行git update-index --assume-unchanged example.txt以“忽略”该文件。

+0

谢谢,我认为你先回答。 – Wyck

+0

这绝对有诀窍,但我没有找到任何解释为什么.gitignore文件在某些​​情况下无法使用的任何内容。对于intellij android项目,我无法排除.idea中的xml文件。忽略模式与它们应该是一样的,适用于相同路径级别的其他目录。为什么?谁知道 – speedynomads

2

一种可能的方法是告诉Git假定文件不变。

$ mkdir project 
$ cd project 
$ touch example.txt 
$ git init 
$ git add . 
$ git commit -m "checkin..." 
$ git update-index --assume-unchanged example.txt 
$ echo "hello" >> example.txt 
$ git status 
# On branch master 
nothing to commit (working directory clean) 
$ 

信任这就是你想要的。应该预先警告,这种方法有它的瑕疵 - 尤其是如果你试图切换到example.txt版本与master版本不同的分支。