我以为我已经想到了这一点,但是最近的尝试却失败了。
我需要提交一个文件,然后提交后在任何后续的repo提交中忽略它。
让我们说文件是example.txt。
我将更改提交到example.txt并将它们推送到github。
然后我touch .gitignore
并添加example.txt并保存。
然后我使用git rm --cached example.txt
然后git add .gitignore
提交 - >推送
此步骤的问题是git status显示example.txt已删除,因此commit / push将其从远程仓库中删除。
我在创建.gitignore
和rm --cached
时尝试了多种变体,它删除了文件或不忽略它并提交不需要的更改。
寻找有关忽略已提交文件而不删除它们的确切过程的见解。
答案 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中的不同。