如何忽略与github同步的本地存储库中的某些文件?
我正在使用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忽略”我得到这个错误
首先, 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
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只是阻止你使用跟踪文件修改未跟踪的文件。只要他在拉之前作出承诺,他就没有问题。 – 2012-04-11 00:20:40
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
我指的是如果使用本地忽略方法来避免git抱怨的问题。提交更改然后提交是正确的方法(然后从不推送)。现在gustavomanolo你的满意度如何? – 2012-04-11 01:28:19
您可以忽略文件,然后忽略.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
“git的RM”并不仅仅是多了不少让'Git停止跟踪它' - 删除最严重的文件。 'git rm --cached'会将它从索引中移除,但Git仍然会'跟踪它',因为它存在于源代码中,并且会被'git status'等等看到。 – GoZoner 2012-04-11 00:06:28
@GoZoner我删除了我以前的评论,因为它令人困惑,因为我对你的评论感到困惑。你是对的,如果他想把这个文件保存在他的本地系统上,但是从他的git索引中删除它,他应该使用'git rm --cached'。 – 2012-04-11 00:19:02