勇哥关于git忽略文件(.gitignore)没有效果的研究

勇哥注:

如果你的初始版本在没有添加忽略文件.gitignore的情况添加到了暂存区、本地版本仓库、远端版本仓库。

此时你的bin目录下的各类dll, pdb等文件会一并上传。

此后,你每改一次代码(哪怕只改了一个字),重新编译后你的更新文件可能达到数千,原因是dll和pdb之类的二进制文件都会相应起变化。

这样的状态下,如果你的两个分支相合并,就会产生数千个冲突。

此时你想到要添加.gitignore,忽略掉所有bin目录,但是你会发现并没有卵用。

原因是那些想被你忽略的文件已经在暂存区、本地版本仓库了。

怎么解?


解决方法:

(1)git rm -r --cached .   //删除所有文件的跟踪,但不删除文件

(2)修改或者更新.gitignore文件

(3)git add .gitignore

(4)git commit -m "添加了忽略文件"

(5)git add .       //此时你会发现添加到缓存的文件不再包含被忽略掉的文件

   如果此步后,发现仍然有目录下的文件仍然是被忽略状态,则执行下面的强制添加忽略文件指令:

   git add -f  Loader\bin\plugins\MainForm


(6)git commit -m "修正了忽略文件问题的初始版本"


如果有已经添加到暂存区的单独的目录需要忽略:

git rm -r --cached SamsunMotion/SamsunMotionWin32/Loader/bin/ProjectDataBackup

此时这个目录被取消跟踪:

image.png

然后你改下忽略文件,添加这个目录


如果是已经添加到暂存区的单独的文件要忽略:

git rm --cached SamsunMotion/SamsunMotionWin32/Loader/bin/alllogs.txt

然后你改下忽略文件,添加这个文件的全路径串




下面是本话题的相关的扫盲知识:

========================================


git库所在的文件夹中的文件大致有四种状态:

Untracked:未跟踪,此文件在文件夹中,但没有加入到git库,不参与版本控制。 
通过git add 状态变为Staged。

Unmodify:文件已入库,未修改。即版本库中的文件快照内容与文件夹中完全一致. 
这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 
如果使用git rm移出版本库, 则成为Untracked文件。

Modified:文件已修改, 仅仅是修改, 并没有进行其他的操作. 
这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 
返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。

Staged:暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 
文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified


git的四个工作区域如下图所示:

image.png

没有被git add过的修改记录全部在workspace(工作区),所有已经被git add的记录全部在Index(暂存区),已经commit过的都以各个版本的形式存在于Repository版本库。

已经被tracked的文件发生的更改也是需要每次进行add,这样才会将到此为止的修改放入stage区。也就是说add本质上是两个作用:add新文件、add更改。


新建文件--->Untracked

使用add命令将新建的文件加入到暂存区--->Staged

使用commit命令将暂存区的文件提交到本地仓库--->Unmodified

如果对Unmodified状态的文件进行修改---> modified

如果对Unmodified状态的文件进行remove操作--->Untracked


工作区和暂存区的一些删除与恢复指令

丢弃workspace、INdex区所有改动,回滚到之前的版本库中的状态
git reset

回滚到旧版本后,要切换到更新的版本时,目标版本的commit_id:
git reflog

丢弃某个文件在working区发生的改变
git checkout -- filename

把某个已经add到stage区的文件清除
git reset HEAD filename

恢复误rm某个working区文件(注意该文件必须之前存在于版本仓库)且本次删除还未commit,怎么检出恢复
git checkout -- filename

恢复误rm某个working区文件(注意该文件必须之前存在于版本仓库),但本次rm已经commit
git reset HEAD filename
git checkout -- filename
          
这里reset将文件变成untracked的文件,再checkout恢复working区到版本库最后一个版本


查看文件更改状态的指令


(1)git status

image.png

上面信息的释义:

当前在devLxy分支
你的分支‘origin/devLxy’是最新版本

不在缓存区的文件:
   (执行git add 指令可以把下面文件的改变更新到缓存区)
   (执行git restore指令可以把工作区的文件的修改丢弃掉)

红色的文件状态为modified,指此文件已经在缓存区了,你可以使用git commit提交到本地版本库中去。



新建一个文件lxy1.txt,可以看到它的状态是Untracked files(非跟踪的文件)

image.png

进行git add后,此文件提交到暂存区,文件状态是 new file

提示可以进行git restore撤消文件到工作区

image.png

git restore撤消lxy1.txt到工作区后,它又变成一个非跟踪的文件(Untracked file)

image.png


(2)git restore指令

image.png

nothing to commit, working tree clean    无需要提交文件,工作区是干净的(文件没有任何改变)


git status -s 简短输出结果

image.png


删除跟踪状态


git rm

git删除一个文件,但是由于lxy1.txt文件已经在暂存区,所以无法删除。

提示必须使用参数-cached  -f

image.png

-cached  是删除跟踪但不删除文件

-f 是删除跟踪,同时删除文件

image.png


一此测试用的cmd指令和git指令:

//创建一个空文件
touch filename

//显示文件内容
type  file

//重定向,这里相当于复制文件了
type f1 > f2

//rm只能删除没被跟踪的文件
rm  file

//git的rm,可以取消跟踪,或者连同文件一起删除
git rm file

//拷贝屏幕输入,相当新建文件,注意按ctrl+z结束输入
copy con file


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年5月    »
12345
6789101112
13141516171819
20212223242526
2728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864