购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.9 有些文件不想放在Git中

有些比较机密的文件不想放在Git中一起备份,如数据库的存取密码或AWS服务器的存取金钥……

除了比较机密的文件,对于一些程序编译的中间文件或暂存文件,同样不想将其放在Git中。因为每次只要一编译,就等于产生一个新的文件,对项目来说通常没有实质的利用价值。

1. 忽略这个文件

如果不想把文件放在Git中,只需在项目目录中放一个.gitignore文件,并且设置想要忽略的规则即可。如果这个文件不存在,就手动新增它:

$ touch .gitignore

然后编辑这个文件的内容:

# 文件名称 .gitignore

# 忽略secret.yml文件
secret.yml

# 忽略config目录下的database.yml文件
config/database.yml

# 忽略db目录下所有后缀是 .sqlite3的文件
/db/*.sqlite3

# 忽略所有后缀是 .tmp的文件
*.tmp

# 如果想要忽略.gitignore这个文件也可以,只是通常不会这么做
# .gitignore

只要.gitignore文件存在,即使这个文件没有被Commit或Push上Git服务器,也会有效果。但通常建议将这个文件Commit进项目并且push上Git服务器,以便让一起开发项目的所有人可以共享相同的文件。

在新增文件时,只要符合.gitignore文件中的规定,这个文件就会被忽视。例如,现在的状态是刚刚完成Commit,暂存区与工作目录都是干净的:

$ git status
On branch master
nothing to commit, working tree clean

这时加入要被忽略的文件secret.yml:

$ touch secret.yml

再看一下状态:

$ git status
On branch master
nothing to commit, working tree clean

现在,这个文件虽然确实存在这个目录中,但Git已经“感应”不到它了,即它被Git无视了。

如果不知道自己所用的工具或程序语言通常会忽略哪些文件,可以登录https://github.com/github/gitignore查看,上面整理了一份各种程序语言常见的.gitignore文件。

2. 可以忽略这个忽略吗

虽然.gitignore文件列出了一些忽略的规则,但其实这些忽略的规则也是可以被忽略的。只需在执行git add命令时加上-f参数:

$ git add -f文件名称

就可以无视规则了。

3. 咦?怎么没效果

以上面的例子来说,这个项目中刚好有个config目录,而这个目录中刚好有个database.yml文件,完全符合被忽略的规则。照理说这个改动应该会被无视,但编辑database.yml之后却发现:

$ git status
On branch master
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:  config/database.yml

其状态竟然变成了modified,这是为什么?

这是因为config/database.yml文件在.gitignore之前就存在了。.gitignore文件设置的规则只对那些在规则设置之后存入的文件有效,那些已经存在的文件就像既得利益者一样,这些规则对它们是无效的。

如果想套用.gitignore的规则,就必须先使用git rm --cached命令把这些“既得利益者”移出Git,然后它们就会被忽略了。

4. 清除忽略的文件

如果想清除那些已经被忽略的文件,可以使用git clean命令并配合-X参数:

$ git clean -fX

那个额外加上的-f参数是指强制删除。这样一来,就可以清除那些被忽略的文件了。 TE/9vyFDoDpMgyhQHhPTBSc6Ro61ipq7oCZSy49H0gDlEGbIlGZdHEmsSFdQmnAh

点击中间区域
呼出菜单
上一章
目录
下一章
×