我的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更改存储库中的文件。 我怎么能这样做?
答案 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
这样,您可以在以后更新模板,也可以将其保存在存储库中,但每次更改实际配置时,都不会跟踪它们,因为它们属于被忽略的文件,并且不在存储库中。