zoukankan      html  css  js  c++  java
  • 【git】gitignore

    gitignore

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

    前提

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

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

    实践1

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

    $ cat .gitignore
    .idea
    .env
    $ git check-ignore -v .idea
    .gitignore:1:.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
     1 file changed, 7 deletions(-)
     delete mode 100755 .env
    $ git push origin branch_v1:branch_v1
    .......
    $ git check-ignore -v .env
    .gitignore:2:.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

  • 相关阅读:
    【CodeForces】[612C]Replace To Make Regular Bracket Sequence
    【POJ】[1363]Rails
    【POJ】[1363]Rails
    【杭电】[1022]Train Problem I
    【杭电】[1022]Train Problem I
    【杭电】[1873]看病要排队
    【杭电】[1873]看病要排队
    【HPU】[1714]感恩节KK专场——送给新生的礼物
    【HPU】[1714]感恩节KK专场——送给新生的礼物
    [leetcode]392. Is Subsequence 验证子序列
  • 原文地址:https://www.cnblogs.com/helww/p/8119651.html
Copyright © 2011-2022 走看看