2

为咩向 GIT 添加文件时你不看一眼

 2 years ago
source link: https://yihui.org/cn/2017/06/git-add/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为咩向 GIT 添加文件时你不看一眼

谢益辉 / 2017-06-13


前面无情挑了第三届靠谱厮奖得主的刺,问 Markdown 源文件中为咩不空行。今日看见第四届靠谱厮奖得主又触碰到我的一个地雷,于是也唠叨几句。哦,对了,我还没空给这二位颁奖,待我写完 blogdown 的书、搬完 COS 的家、能有空喘口气了再仔细着颁吧。

其实我已经在《GIT 子模块》一文的脚注 1 中说明过了:向 GIT 里添加文件时,不要全选然后看也不看就全部添加。两个原因:一方面,这样可能会添加一些垃圾文件进来,比如 .DS_StoreThumbs.db 之类的操作系统产生的无用文件;另一方面,这样可能无意添加包含敏感信息的文件,比如密码或密钥。如果你想要“借用”一下别人的诸如 AWS 之类的付费账户,你可以试试在 Github 上搜索密钥,没准儿能找到几个能用的。

我看大为同志提交的文件中并没有什么特别敏感的信息,所以才敢公开说这事,然而 .Rhistory 文件还是一定程度上无情出卖了他(大家不要告诉他,快点快点捉住他,捉住他)。

有时候我会否定我自己以前的观点,但关于用 GIT 时尽量用一个图形界面这个观点,我基本上从 2013 年就坚定下来了。命令行夜太黑,尽管再危险,总有人黑着眼眶熬着夜;在图形界面里,一切都亮堂得多:

GIT 差异界面

最近几周我脑子里总是在回荡那句话:我们创造了工具,然后工具反过来塑造了我们。UNIX 命令行至上的现象大概就是一个很好的例证。两周前我在墨尔本的报告中再次引用了这句话,说的是 LaTeX 塑造了我们。看看 2013 年我跟那二位的辩论就可以知道,捍卫命令行的人抱着命令行就像考拉抱着树一样。可在 GIT 问题上,git add 既不方便,又容易出错,在日常工作中用它究竟有何意义?

我自己用 git 命令行一般只有如下几种情况:

  • git pull --rebase origin master 保证 GIT 历史干净,不要无意创建一个合并的记录;这种合并记录也并不是什么错,只是个人偏好而已,我偏好纯线性的 GIT 历史。隔三差五我就会看见一个合并记录,比如这里这里。当然,我这种懒人是不会重复敲 --rebase 参数的,所以设置一下全局选项:

    git config --global pull.rebase true
    
  • git rebase -i master~N 交互式调整还没提交的 GIT 记录,其中 master 可以是别的分支名,也可以是 HEAD,N 表示从现在往回倒退几个记录,默认情况下我用 nano 编辑(此处我允许 Emacs/Vi/Vim 党们笑出声来,对,我就是这么弱鸡,还用 nano);调整包括移动记录,合并记录,或暂停在某个记录上添补一些修改,让 GIT 记录更加轻便明了,免得将来回头看历史,就跟开碰碰车似的:哦,这里错了,那里又倒车改回来了,好不容易看懂了这次提交里的修改,那里又给撤销了。某种情况下,GIT 历史就是精神分裂的自己跟自己的对话,为了六个月甚至更久之后的自己还能明白当时在干啥。说到这儿,我又忍不住吐槽那些用一个词作为 GIT 提交消息的行为了,放眼望去,历史记录中就一个单词在不断重复:update(废话,我当然知道你在更新,可更新了啥以及为什么更新呢)。当然,这个有时候也可以理解,尤其是无关紧要的私人项目,随便写写 GIT 消息也无妨。如果做一个想要后继有人的项目,每一次更改最好是写上一条完整的消息。

  • git checkout -b 创建一个新分支并切换到该分支,这个命令现在已经没有必要了,因为最新开发版的 RStudio 的 GIT 栏里添加了创建分支的按钮。

除此之外,我基本上就很少用 GIT 命令行了。

前面提到了 .DS_Store 文件,这种文件也可以全局忽略,把文件名添加到用户根目录下的 .gitignore_global 文件中即可,比如这是我的文件:

$ cat ~/.gitignore_global
*~
.DS_Store

统计模型之母 配图

Disqus Utterances Preferences

© Yihui Xie 2005 - 2020

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK