zoukankan      html  css  js  c++  java
  • Git

    问题

    如果某个文件已经存在于远程仓库了,也就是说某个文件已经被版本控制了,如果将该文件添加到.gitignore中,是无法生效的。因为.gitignore是用来控制尚未被纳入版本控制的文件,如果文件已经存在于远程库中,自然也就无法生效了。

    于是就此衍生了一个问题:.gitignore怎么忽略已经被版本控制的文件?

    解决方法

    方法一

    直接在远程库里将想要忽略的文件删除掉,再将该文件写入.gitignore中即可。

    这种做法的前提是,你确定该文件是允许从远程库删除掉的,然而有些时候,这种做法是不可能的。要么没权限去远程库删掉该文件,要么该文件是必须的。

    方法二

    使用命令git rm --cached filename,然后将该文件写入.gitignore中即可。

    该命令表示从git仓库中将文件移除,不再进行版本控制,但保留工作区的该文件。

    需要注意的是,该命令其实和方法一差不多。git rm表示移除某个文件,--cached表示从暂存区中移除,如果不加该参数就是直接从工作区移除了。

    工作区就是指的Working Tree,暂存区就是指的Stage。工作区就是我们的磁盘,被版本控制的文件都存放于工作区。如果改动了某个文件,首先要将该文件添加到暂存区(Stage),然后再提交(commit)到本地仓库,最后才推送(push)到远程库。

    git rm --cached filename并不会从物理上删除文件,只是从暂存区中将文件删除。由于该文件原本已经被版本控制了,使用了该命令后,虽然保留了工作区的该文件,但是却会在暂存区中生成一个删除了该文件的记录,如果此时进行commit,就会把版本库里的该文件给删掉了,如果push到远程库,也会被删掉。最终还是走的方法一的路子。

    关于git rm --cached filename的补充

    看到有篇文章举例很详细,如下:

    • 新建文件1.txt,未被跟踪(Untracked files),提交到暂存区(Changed to be committed),未提交到版本库。 使用git rm —cached 1.txt
      • 把文件恢复到未被跟踪的状态,即删除暂存区中的1.txt;
    • 文件1.txt,已经提交到版本库,工作区,暂存区都是干净的。使用git rm —cached 1.txt
      • 把工作区的文件1.txt置为了”未跟踪”状态,即Untracked files
      • 暂存区生成一个deleted 1.txt的记录,如果提交了,就是把版本库中的1.txt删除。
      • 不影响工作区中的文件。
    • 文件1.txt, 已经提交到版本库,修改1.txt,并且提交到了暂存区。使用git rm —cached 1.txt
      • 把工作区的文件1.txt置为了”未跟踪”状态,即Untracked files。
      • 暂存区生成一个deleted 1.txt的记录,如果提交了,就是把版本库中的1.txt删除。
      • 不影响工作区中的文件。还是修改后的1.txt
    • 文件1.txt, 已经提交到版本库,修改1.txt,提交到暂存区,继续修改1.txt。使用git rm —cached 1.txt 
会报错,不能执行操作。

    参考链接

  • 相关阅读:
    【原创】Kakfa cluster包源代码分析
    【原创】Kakfa log包源代码分析(二)
    【原创】Kakfa log包源代码分析(一)
    【原创】Kakfa metrics包源代码分析
    【原创】Kakfa network包源代码分析
    【原创】Kakfa common包源代码分析
    【原创】Kakfa serializer包源代码分析
    基于OpenCV/TensorFlow的手写MNIST文字匹配
    随机游走 点云匹配
    OpenCV Mat&Operations
  • 原文地址:https://www.cnblogs.com/yulinlewis/p/10236563.html
Copyright © 2011-2022 走看看