本地 Git 仓库与 GitHub 仓库不一致

4
我使用Git进行源码管理,我在我的Mac上有一个本地仓库和一个在GitHub上的远程仓库。它们都应该是完全一样的。我独自工作,是我的Web应用程序中唯一的程序员。但是,我无法让Git正常工作——使用SVN时,我只需将代码提交到仓库中,然后就可以了!远程仓库神奇地拥有完全相同的文件……但是,在Git中不行,它似乎不能这么简单。我必须读整整一本书才能使用这个愚蠢的东西。
那么问题来了,你的开发周期是怎样的呢?我只想在GitHub上拥有与本地Git仓库完全相同的代码。我的编码过程如下:
我编写代码……添加、编辑、删除、修改文件……所以我在命令行中这样做:
git add .  # this is *suppose* to add all files that are not part of the repository

git commit -m 'I commited this because...'

git push # send it to github

现在,经过几周的工作和数百个提交,Github上的代码与我的本地存储库略有不同。请帮我解决这个问题,在我放弃Git和开源转向Windows和SVN或跳楼之前。
非常抱歉用词有些激烈,我只是真的很沮丧,因为我一直在发现我的源代码库存在不一致的情况。这种感觉很不好。我想象着有一天我会丢失我的笔记本电脑,然后Github上还是旧的代码。这似乎很愚蠢。
哦,还有一件事...我不想每次删除文件时都要执行git rm /some/long/path/to/file.txt。有更简单的方法吗?这太愚蠢了,而且太费时间了。
谢谢你的帮助。
Br

你的本地仓库和远程仓库以何种方式分歧? - Damien Wilson
我建议运行 'git gui',这样可以更轻松地查看您的更改并进行提交。此外,如果您在本地删除了一个文件,则可以通过gui轻松提交该删除操作 - 无需手动输入 'git rm ....'。 - James
4个回答

3
git add . 实际上只将文件和已在repo中的更改添加。尝试使用git add -all .以实际添加删除的文件。
如果您只想删除文件而不进行其他更改,可以使用git add -u .。有关更多信息,请查看git-add手册页面:http://www.kernel.org/pub/software/scm/git/docs/git-add.html 我最近刚开始使用git而不是svn,必须承认一开始转换时也遇到了一些困难。祝你好运!

2
Github有一个不错的页面,详细介绍了如何创建、提交和推送:http://help.github.com/creating-a-repo/
特别是这个:git
(来源:skitch.com) 你可能想要使用git push origin master (当然,你需要先定义origin,请参阅上面的信息),而不是仅使用git push
另一个重要的命令是git commit -a,它可以简单地提交所有更改的文件等,无需单独使用git add
你可能还想检查git status的输出,看看是否有任何可疑的内容,可能会导致GitHub不是完全一致的副本。
顺便说一下,svn也是开源的 :)。

好的,"git push origin master" 是什么意思?这是我用来设置我的代码库的相同指令... - dingalingchickenwiing
我刚刚执行了“git push origin master”命令,结果回复说“Everything up-to-date”,但这是错误的,什么都没有更新。Github和我的本地代码库存在不一致性。 - dingalingchickenwiing
git push 相同,但在我看来似乎更正确。另外一件事是尝试运行 git status,它会显示一些信息,请查看是否有任何不一致/导致两个存储库之间差异的问题(例如未跟踪的文件等)。 - houbysoft
1
@第二条评论:那么您可能没有正确添加所有文件,或者没有提交所有更改。再次尝试检查 git status - houbysoft
"git status" 给了我一个长长的文件列表,这些文件已经在本地仓库中被删除,但仍然存在于远程仓库中。这正是我的问题所在。我希望这两个仓库完全相同。我该如何实现这一点? - dingalingchickenwiing
删除指的是什么?只是rm还是git rm? 无论哪种情况,在使用git rm删除后,你必须提交并推送更改才能在远程仓库中看到。 - houbysoft

1
“git status” 给了我一个很长的文件列表,这些文件已经在本地仓库中被删除,但是在远程仓库中仍然存在。这就是我的全部意图。我希望这两个仓库完全相同。我该如何做到这一点??????????????
如果“git status”显示这些文件,则您尚未将它们添加到提交并将其推送到主存储库中。这不是Git的错,而是您的错。自动从主存储库中删除东西的版本控制系统,因为您在本地工作副本中删除了它,将是一个非常危险的版本控制系统。
执行“git commit -a”(参见http://www.kernel.org/pub/software/scm/git/docs/git-rm.html),它将把所有这些删除添加到提交中。提交并推送,您应该是最新的。

1
啊,好答案:使用git commit的-a标志应该可以消除用户对“git add .”的需求,这样它就更像svn了。 - Matt DeKrey
我执行了 "git status" 命令并得到了文件列表,然后执行了 "git commit -a" 和 "git push" 命令——现在一切似乎都是最新的。 "git status" 命令是用来检查本地和远程代码库是否有差异的吗? - dingalingchickenwiing
1
Git status 执行它名字所描述的操作:以当前跟踪的分支为中心,显示本地存储库的状态,而通常这个分支是 origin/master - Damien Wilson
1
“git status” 基本上是在本地存储库中执行“检查修改”。您只能将已提交的内容推送到远程服务器。 - Matt DeKrey

1

如果您能够明确指出远程存储库与您的期望有何不同(例如,您的工作树中有什么),那将会很有帮助。您间接地唯一确定的问题是,远程存储库仍然包含您已从本地工作树中删除的文件。

如果“删除的文件仍然存在于远程存储库”是您唯一的问题,那么您应该从使用git add .切换到git add -A。前者只会添加新文件并暂存已跟踪文件中所做的更改。后者将添加新文件、暂存已跟踪文件中所做的更改,并删除不再位于工作树中的文件。如果您更喜欢更具提示性的选项名称,则可以使用--all代替-A。使用-A/--all将避免需要使用git rm each/deleted/file


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