2012-04-10 202 views
4

我正在使用github在本地机器上创建我的代码的最新版本的副本,我不想提出推送请求,我只是想进行pull请求并修改本地机器中的某些文件,并尝试告诉github忽略一些文件并更新其他文件。如何忽略与github同步的本地存储库中的某些文件?

我用下面的命令忽略一个名为“config.inc.php文件”:

git rm /home/escogit/www/inc/config.inc.php 

这时我犯了远程GitHub的仓库中修改到其他文件,当我试图让新的变化用命令“混帐拉”我得到以下错误:

 
remote: Counting objects: 9, done. 
remote: Compressing objects: 100% (1/1), done. 
remote: Total 5 (delta 4), reused 5 (delta 4) 
Unpacking objects: 100% (5/5), done. 
From github.com:Visooal/Colegios 
    e724ba3..a624059 master  -> origin/master 
Updating e724ba3..a624059 
error: Your local changes to the following files would be overwritten by merge: 
www/inc/config.inc.php 
Please, commit your changes or stash them before you can merge. 
Aborting 

注意:即使我用命令git的承诺提交-m“.config.inc.php忽略”我得到这个错误

回答

1

首先, git rm不会忽略文件。它从本地和索引中删除文件。如果您在删除文件之前提交了该文件,即使该文件不在当前索引中,该文件也会始终存在于您的树中。另一个人可以很容易地重新添加它。你应该在git rm之后为该文件设置一个.gitignore条目。人们仍然可以手动绕过.gitignore,但该文件不会在git status或任何UI工具中显示。

你需要做它说的。 git commit -a -m "My Commit Comment"之前你做git pull

只是为了给一个更清晰的图片,运行这些命令,假设你已经git rm编辑该文件。

echo 'config.inc.php' > .gitignore 
git add .gitignore 
git commit -a -m "Removed uneeded file" 
git pull 
// Fix any merge issues 
git commit -a -m "Merge" 
git push 
+1

“git的RM”并不仅仅是多了不少让'Git停止跟踪它' - 删除最严重的文件。 'git rm --cached'会将它从索引中移除,但Git仍然会'跟踪它',因为它存在于源代码中,并且会被'git status'等等看到。 – GoZoner 2012-04-11 00:06:28

+1

@GoZoner我删除了我以前的评论,因为它令人困惑,因为我对你的评论感到困惑。你是对的,如果他想把这个文件保存在他的本地系统上,但是从他的git索引中删除它,他应该使用'git rm --cached'。 – 2012-04-11 00:19:02

0

Git不会允许您使用未提交的更改进行提取。为了让git忽略文件,通常你会创建一个.gitignore文件,但是你不能在这里,因为这将是一个改变;但您可以将文件名添加到repo/.git/info/exclude。该文件使用与.gitignore相同的语法,但不会被git索引提交或查看。因此,在您的示例中,您将添加该行

www/inc/config.inc.php 

escogit/.git/info/exclude

如果您在远程中更改这些忽略的文件之一,然后再提取该更改,则可能仍然存在问题。所以最好的做法是提交本地更改。他们不会被推动,所以没关系。要做到这一点运行

git commit -a -m "a message explaining commit" 

然后你可以拉和git会自动合并你的变化。如果您需要使本地恢复到干净状态,您可以使用git checkout .

+0

他为什么要做出改变是坏事?他可以创建,添加和修改任何他想要的东西。 Git只是阻止你使用跟踪文件修改未跟踪的文件。只要他在拉之前作出承诺,他就没有问题。 – 2012-04-11 00:20:40

+0

id编辑文件和git commit -a -m“sample”输出以下消息:解包对象:100%(5/5),完成。 从github.com:Visooal/Colegios a624059..db091a4主 - >产地/主 更新a624059..db091a4 快进 WWW/INC/config.inc.php文件| 2 + - 1个文件已更改,1个插入(+),1个删除( - )。所以它同步文件 – gustavomanolo 2012-04-11 00:29:37

+0

我指的是如果使用本地忽略方法来避免git抱怨的问题。提交更改然后提交是正确的方法(然后从不推送)。现在gustavomanolo你的满意度如何? – 2012-04-11 01:28:19

0

您可以忽略文件,然后忽略.gitignore下的更改。

所以它会是这样的: 将您的文件添加到。gitignore

echo '/home/escogit/www/inc/config.inc.php' >> .gitignore

则忽略的变化gitignore

git update-index --assume-unchanged .gitignore

它完成!

警告:中的.gitignore所有本地更改将被省略撤消此操作,并再次与期望的功能重新撤消它使用: git update-index --no-assume-unchanged .gitignore

相关问题