初次使用git,遇到了一个非常棘手的问题,那就是在本地编译后,或者是修改了代码后,在git的控制台输入git status的时候,会发现,多出来一堆的.class文件和其他有在本地改动的配置文件,然而.class文件和配置文件(一般情况)是不需要提交的,这该如何是好呢?网上搜了资料,说是在项目根目录下的.gitignore文件中添加忽略文件,但是我在添加了后,没有效果(刷新项目,重新进git控制台,各种姿势各种试),很难受,请教同事,都说修改.gitignore文件就可以了,但是了,我就纳闷了,我各种姿势修改,都不起作用,期间,也有搜到几个命令用于忽略不需要提交的文件,但是那个命令不适合大面积的忽略,只适合少量的忽略,遇到大量的修改,随时准备嗝屁。后面又在网上搜到了一个解决方案,但是会去大面积的动远程仓库的代码,所以和项目经理来回拉扯了很久,才同意我执行了那个命令,最后问题也得到了直接的解决,究竟是什么命令了,我们就来细看一番。
解决方案一:修改.gitignore配置文件。此操作是在本地作的操作,不会影响正常项目和其他成员。
1、这个配置文件就在项目跟目录下,很好找,如果没有的话,可以创建一个即可。
2、找到/创建后,打开编辑,加入要忽略的文件目录/文件。
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
# 忽略*.o和*.a文件
*.[oa]
# 忽略*.b和*.B文件,my.b除外
*.[bB]
!my.b
# 忽略dbg文件和dbg目录
dbg
# 只忽略dbg目录,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目录
dbg
!dbg/
# 只忽略当前目录下的dbg文件和目录,子目录的dbg不在忽略范围内
/dbg
# 以'#'开始的行,被视为注释.
* ?:代表任意的一个字符
* *:代表任意数目的字符
* {!ab}:必须不是此类型
* {ab,bb,cx}:代表ab,bb,cx中任一类型即可
* [abc]:代表a,b,c中任一字符即可
* [ ^abc]:代表必须不是a,b,c中任一字符
3、为确保期间是否存在未刷新配置文件问题,我选择了退出git命令控制台,刷新项目,然后在进入git命令控制台,输入git status命令,查看修改是否生效。
4、如果看不到了预期的目标,那么恭喜你,配置生效了;如果预期目标任然存在,先不慌,我们去检查一下.gitignore配置文件,看是否修改有误,或规则搞错了,确认后,在安装 3 的操作在去看一下修改是否有效果,如果任然无效,那就请移步解决方案二。
解决方案二:在确认解决方案一无效后,可尝试此方案。此方案涉及修改远程厂库代码跟踪点,有可能会有较大影响,个人现已知的影响是:去掉远程仓库对通过命令指定的文件的跟踪。所以个人建议在和代码管理员协商后再使用此命令。
具体原因:
.gitignore只能忽略那些尚未被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。一个简单的解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。
命令如下:
//建议在执行一下目录时,执行pull操作
git pull
// 删除暂存区或分支上的文件, 同时工作区也不需要这个文件
git rm -r --cached .
或
//这里我把个人本地编译后的文件目录及其下所有文件清除跟踪
git rm -r --cached build/\*
//执行了这个命令后,需要执行以下命令
//添加修改到个人本地缓存区
git add .
//将个人修改提交到个人本地仓库去
git commit -m '清除文件跟踪'
//将个人修改推送到远程仓库
git push origin HEAD:代码分支目录
经过不断的来回折腾,个人问题得到解决,希望能够帮助到有缘(猿)人,更希望能够有有缘(猿)人提供更好的解决方案。
注:解决问题期间,找到个治标不治本的命令,如下:
//在FILE处输入要忽略的文件,个人发现必须是具体文件路径,不能是目录
git update-index --assume-unchanged FILE