Gitignore不会更新我的仓库中的文件

时间:2014-01-15 16:00:03

标签: git github push gitignore git-commit

我的git有一个简单的问题:

我在github上的存储库中有这个文件 inc.conf.php 。 我不想从回购中删除他,这是一个基本的配置文件。

现在,在我的本地仓库中,我使用自己的配置拥有相同的文件 inc.cong.php ,并且我不希望此文件被提交。

所以我创建了一个.gitignore,并在其中添加了 inc.config.php 。 (.gitignore提交并推送回购)

但是当我在本地和磁带git status更新文件 inc.config.php 时:

On branch master
Your branch is up-to-date with 'origin/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:   Swindle-Foundation5/inc.config.php

no changes added to commit (use "git add" and/or "git commit -a")

但我不想从github更改存储库中的文件。 我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

.gitignore仅用于防止文件被跟踪。跟踪文件后,忽略文件对其没有影响。

您可以使用git update-index --assume-unchanged Swindle-Foundation5/inc.config.php让Git忽略对您文件的更改。

答案 1 :(得分:3)

.gitignore告诉您在存储库中不需要哪些文件。如果您将文件放入存储库,那么git将跟踪它。告诉git我不想跟踪这个文件(通过.gitignore)是相当矛盾的,但我也想跟踪这个文件(通过将它添加到存储库中)。

有些方法可以使git在每次提交时都不提交对该文件的更改,这很乏味且难看。我的建议是首先解决这个问题。你或者你不想跟踪文件吗?如果这样做,那么也将跟踪对文件的所有更改。

您拥有的一个选项是通过引导程序生成文件。例如:

# make a backup of the file
$ git mv Swindle-Foundation5/inc.config.php Swindle-Foundation5/inc.config.php-template
# add the file to .gitignore
$ echo "inc.config.php" >> .gitignore
# commit
$ git commit -a

所以你基本上跟踪文件的副本,而不是文件本身。并添加一个生成该文件的脚本(例如bootstrap.bash):

#! /bin/bash

cp Swindle-Foundation5/inc.config.php-template Swindle-Foundation5/inc.config.php

这样,您可以在以后更新模板,也可以将其保存在存储库中,但每次更改实际配置时,都不会跟踪它们,因为它们属于被忽略的文件,并且不在存储库中。