Git Ignore不工作,我不明白

时间:2011-10-29 00:05:00

标签: git github commit gitignore

我以为我已经想到了这一点,但是最近的尝试却失败了。

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

让我们说文件是example.txt。

我将更改提交到example.txt并将它们推送到github。

然后我touch .gitignore并添加example.txt并保存。
然后我使用git rm --cached example.txt
然后git add .gitignore提交 - >推送

此步骤的问题是git status显示example.txt已删除,因此commit / push将其从远程仓库中删除。

我在创建.gitignorerm --cached时尝试了多种变体,它删除了文件或不忽略它并提交不需要的更改。

寻找有关忽略已提交文件而不删除它们的确切过程的见解。

2 个答案:

答案 0 :(得分:7)

您确实意识到git rm --cached example.txt将从索引中删除该文件并将其保留在工作目录中。然后,当您提交时,除了您添加的.gitignore文件之外,您还要提交删除文件。因此,当您按下文件时,它将从存储库中删除。

此外,您无法使用gitignore.忽略对跟踪文件的更改。您可以尝试git update-index --assume-unchanged example.txt来“忽略”该文件。

答案 1 :(得分: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中的不同。