如何在与 GitHub 同步的本地仓库中忽略某些文件?

4
我将使用Github在本地机器上创建代码的最新副本,我不想发起推送请求,只想发起拉取请求并修改本地机器上的一些文件,并试图让Github忽略某些文件并更新其他文件。
我使用以下命令来忽略名为“config.inc.php”的文件:
git rm /home/escogit/www/inc/config.inc.php

然后我对远程github仓库中的其他文件进行了更改,当我尝试使用命令"git pull"获取新更改时,出现以下错误:

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 commit -m ".config.inc.php ignored"提交,我仍会遇到该错误。

3个回答

1
首先,git rm不会忽略文件。它会在本地和索引中删除该文件。如果在删除之前已经提交了该文件,那么无论当前索引中是否存在,它始终会存在于您的树中。其他人可能会意外地重新添加它。在你执行git rm之后,你应该为该文件设置一个.gitignore条目。人们仍然可以手动绕过.gitignore,但是该文件将不再显示在git status或任何UI工具中。
你需要按照它所说的去做。在执行git pull之前,先执行git commit -a -m "My Commit Comment"
为了更清楚地说明,假设你已经执行了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
1
@GoZoner 我删除了之前的评论,因为它很混乱,我对你的评论的观点感到困惑。你是正确的,如果他想在本地系统上保留文件但从git索引中删除它,他应该使用 git rm --cached - Andrew T Finnell

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 .


他做出改变为什么会是坏事呢?他可以创建、添加和修改任何他想要的东西。Git只是防止你修改未跟踪文件与已跟踪文件。只要他在拉取之前提交就没问题了。 - Andrew T Finnell
我编辑了文件并执行了git commit -a -m "sample",输出以下消息:解包对象:100%(5/5),完成。 从github.com:Visooal/Colegios a624059..db091a4 master -> origin/master 更新a624059..db091a4 快速前进 www/inc/config.inc.php | 2 +- 1个文件已更改,插入1个 (+) ,删除1个 (-)。 因此它同步了该文件。 - gustavomanolo
我所指的问题是,如果使用本地忽略方法来避免git抱怨。提交更改,然后拉取是正确的方法(然后永远不要推送)。现在gustavomanolo,您是否满意这种方法的工作? - Vic Smith

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接