我有下面的dir结构
这里是.gitignore的内容
conf.php
问题是,当我更改内容conf.php并尝试提交某些内容时,GIT会再次将conf.php
检测为已更改的文件。实际上必须忽略它
我已经承诺了一次。我想从现在开始忽略它。我错过了什么?
我试过以下:
将其从缓存git rm --cached conf.php.
但是现在,当我重新扫描项目时,它希望将conf.php
暂存为已删除。
这不是我想要的。
我希望将其保留在远程仓库并忽略本地仓库中的未来(从现在开始)更改。
答案 0 :(得分:6)
Git不会忽略对已提交文件的更改。
Git忽略,忽略你的回购中的噪音,例如:
$ git init
$ mkdir tmp
$ touch tmp/file1
$ touch tmp/file2
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# tmp/
nothing added to commit but untracked files present (use "git add" to track)
如果.gitignore文件被修改为忽略tmp目录:
$ echo "tmp" > .gitignore
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .gitignore
nothing added to commit but untracked files present (use "git add" to track)
tmp目录内容不再列出 - 但列出了.gitignore文件(因为我刚创建它并且文件本身不会被忽略)。
承诺,没有列出任何变化:
$ git add .gitignore
$ git commit -v -m "addding git ignore file"
[master (root-commit) d7af571] addding git ignore file
1 file changed, 1 insertion(+)
create mode 100644 .gitignore
$ git status
# On branch master
nothing to commit (working directory clean)
现在对.gitignore文件的任何更改都将显示为挂起的更改,tmp目录之外的任何新文件都将显示为未跟踪的文件,并且tmp目录中的任何更改都将被忽略。
如果您已经将conf.php添加到git repo中,git会跟踪该文件。当它改变时,git 将表示它有未决的更改。
解决此类问题的方法是不提交您不想跟踪的文件。相反,您可以做的是提交默认文件,例如:
$ mv conf.php conf.php.default
$ # Edit conf.php.default to be in an appropriate state if necessary
$ git commit -v -m "moving conf.php file"
$ cp conf.php.default conf.php
现在您对conf.php所做的任何更改都不会显示为非暂停更改。
答案 1 :(得分:4)
如果要将空配置文件添加到项目中,然后不跟踪任何其他更改,则可以执行以下操作:
运行以下git命令:
git update-index --assume-unchanged conf.php
您将不会再看到conf.php有待处理的更改
要再次开始跟踪更改,请运行以下命令:
git update-index --no-assume-unchanged conf.php
答案 2 :(得分:3)
只需运行git rm --cached conf.php
如果您有更多提交的文件要忽略:
git rm -r --cached .
git add .
然后提交并推送您的更改。