gitignore

git专门有个文件用来管理那些不被纳入版本库的文件,这个文件是 [.gitignore],所有不被包含的都能放进去,但这个是有前提的。

前提

前提是文件如果没被git客户端tracked,那么该文件是可以直接添加到 [.gitignore] 中的;

否则,如果文件先被track到git项目中,那么即使该文件路径被加到 [.gitignore] 中,该文件的修改也是会被git项目跟踪到的。

实践1

模拟已经tracked到项目,查看文件的状态。

$ cat .gitignore
.idea
.env
$ git check-ignore -v .idea
.gitignore::.idea .idea
$ git check-ignore -v .env
[这里显示的是空行]

同样都在gitignore文件中,为什么一个文件检查ignore状态是通过的,一个检查是失败的?

这里就有个区别:因为我们之前提交过[.env]文件,但是未提交过[.idea]。

这里要回顾下前提。

实践2

如果一个文件被tracked,则加入到 [.gitignore] 是失效的。

$ vim .env
[edit some line]
$ git status .env Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: .env
$ git check-ignore -v .env
[这里输出的是空行,表示验证ignore失败]

这里能够看到,一个被tracked到项目中的文件,它的修改是能够被跟踪到的。

实践3

我们要如何操作?才能将该文件包含到gitignore中,从而它的修改删除状态,不会被git所跟踪

$ git rm .env
rm '.env'
$ git status .env
On branch branch_v1
Your branch is up-to-date with 'origin/branch_v1'. Changes to be committed:
(use "git reset HEAD <file>..." to unstage) deleted: .env $ git commit -m 'Remove: .env'
[branch_v1 bebee11] Remove: .env
file changed, deletions(-)
delete mode .env
$ git push origin branch_v1:branch_v1
.......
$ git check-ignore -v .env
.gitignore::.env .env

最后可以看到,检查ignore状态是成功命中的。

回顾

如果一个文件已经包含在 [.gitignore] 文件中,但是它的修改仍然可以被跟踪到,那么这个文件是被tracked到项目中的,在gitignore包含它之前,它已经提交到项目中了。

解决办法:将该文件从git项目中删除掉即可。

具体操作:

1,将该文件备份到另一文件;

2,操作git命令,将该文件删除掉,然后commit & push到远程;

3,修改 [.gitignore] 文件,把该文件包含进去,然后git commit&push;

4,把1备份的文件重命名会原始文件,原始文件仍然在本地,但是不会被git所管理。

大致操作如下:

1, cp src_file src_backup

2, git rm [src_file]; git commit -m ''; git push origin;

3, vim .gitignore; git commit -m ''; git push origin;

4, cp src_backup src_file; rm src_backup;

更多扩展:

高级-Git官方:https://git-scm.com/docs/gitignore

初级-廖雪峰:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758404317281e54b6f5375640abbb11e67be4cd49e0000

【git】gitignore的更多相关文章

  1. 【git】删除某个文件的所有历史记录,批量删除远程分支

    删除git某个文件的所有历史记录 git的目的就是版本控制,记录每一个版本的变动.然而有的时候我们往往希望从版本库中彻底删除某个文件,不再显示在历史记录中.例如不小心上传了一堆错误的文件,或者不小心上 ...

  2. 【Git】 GitLab简单使用

    本例介绍简单实用GitLab,安装请参照[Git] GitLab服务器社区版安装与配置 1.用户和组的管理 a.创建组,在首页点击Create a group b.创建用户,在首页点击Add peop ...

  3. 【git】强制覆盖本地代码

    [git]强制覆盖本地代码(与git远程仓库保持一致) 2018年04月27日 23:53:57 不才b_d 阅读数:21145   版权声明:本文为博主不才b_d原创文章,未经允许不得转载. || ...

  4. 【Git】远程分支

    [Git]远程分支 转载:https://www.cnblogs.com/yangchongxing/p/10239270.html 目录 ============================ 1 ...

  5. 【Git】本地分支

    [Git]本地分支 转载:https://www.cnblogs.com/yangchongxing/p/10221382.html 目录 ============================== ...

  6. 【Git】安装配置

    [Git]安装配置 转载:https://www.cnblogs.com/yangchongxing/p/10173231.html 1.在 Ubuntu 上安装 $ sudo apt-get ins ...

  7. 【Git】学习开始

    [Git]学习开始 转载:https://www.cnblogs.com/yangchongxing/p/10172683.html 在线电子书籍:https://git-scm.com/book/z ...

  8. 【Git】git使用 - 各种常用场景命令解决

    (多看git中的各种帮助-h/--help,可能有你想要的命令) 1.分支的创建和切换 创建 >>>> git branch branchName 切换分支 >>& ...

  9. 【git】【Idea】git刷新获取远程分支列表,可以在idea上看到最新的远程分支列表

    [前提:本地项目是从GitLab或gitHub这些远程仓库上拉下来的 ,并且本地安装了git] ==================================================== ...

随机推荐

  1. Redis简单生产者消费者

    注意:redis客户端执行是单线程的,不能将客户端放在外面,内部执行使用多线程的方式. // 创建生产端连接 final Jedis jedisProducter = new Jedis(R_HOST ...

  2. linux之Ubuntu下Django+uWSGI+nginx部署

    http://www.chenxm.cc/post/275.html?segmentfault

  3. vue:再vue-cli项目中使用window以及调用window上的方法

    一: 1:在main.js中 Vue.prototype.myfunction = function() {/*你的自定义Vue方法*/} 2:在mounted(或其他生命周期中) 或者 method ...

  4. intellij idea远程debug调试resin4教程

    昨天有个项目部署在阿里云 想远程调试不知道怎么弄.看日志需要账户密码很不方便呀.今天加班特意baidu了下. 1.先在远程的resin修改conf中resin.xml配置文件 在server-defa ...

  5. html页面跳转

    button <button onclick="window.location.href='edit.jsp'">完善个人信息</button> 单击提交表 ...

  6. mycat的schema.xml的个人的一点理解

    官方文档里讲的详细的部分的我就不再赘述了,我只是谈谈我自己的理解 刚开始接触mycat,最重要的几个配置文件有server.xml,schema.xml,还有个rule.xml配置文件 具体都是干啥用 ...

  7. 【371】Twitter 分类相关

    Bag-of-words model:就是将句子打散成单词的集合. N-gram model:同上,只是按照 n 进行顺序组合. 参考:机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器 留言板侮辱 ...

  8. 让一个非窗口组件(non-windowed component)可以接受来自Windows的消息

    为什么要这样做? 有时候我们需要一个非窗口组件(比如一个非继承自TWinContrl的组件)可以接受Windows消息.要接受消息就需要一个窗口句柄,但是非窗口组件却没有句柄.这篇文章将讲述怎么让一个 ...

  9. AngularJS理论知识

    两个核心概念 三个架构 MVC 一切应用程序都是数据的增删改查 那么总要有东西装数据吧 Model就是干这个事(数据表现和操作) View(展现数据) Controller(逻辑) 那么M- V- C ...

  10. Javascript中call、apply之我见

    一.call和apply定义. 1.Call 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg ...