正确使用git

时间:2010-07-07 22:55:11

标签: git version-control versioning

过去几天我一直在阅读和尝试Git,而且我还有一件事似乎无法找到好的信息。

我在Git上看到,在每个开发人员的机器上设置公共和私有存储库克隆是很常见的,这样开发人员可以按照他/她想要的次数进行私有提交,然后只有在他们/她想要的时候才会推送到公共存储库。对变化感到满意。

我想知道两件事:

1 - 我如何设置如上所述的系统(使用集中式方法(使用--bare创建的存储库)。

2 - 我希望能够使用任何提交消息向我的私有存储库提交尽可能多的提交,并且当我将更改推送到公共存储库或裸存储库时,不会显示这些消息(或修订版本) )。 IE浏览器。我希望我的公开更改能够通过一条消息一次性提交。

谢谢!

3 个答案:

答案 0 :(得分:2)

git rebase是你的朋友

这个问题的回答,what-are-your-favorite-git-features-or-tricks专门讨论了你的情况

答案 1 :(得分:1)

有几种方法可以设置Git“中央”服务器,如FAQ中所述,主要通过git-daemon,通过HTTP或通过现有的SSH服务器(如果它在Linux机器上,您可以通过适当地设置unix组并授予组权限来共享存储库。或者,您可以使用GitHub等现有服务。

如果要将多个本地提交作为单个提交推送,则可以使用git mergegit rebase -i(交互式)“压缩”这些提交。我发现使用git rebase -i更容易。您需要为先前的提交(您可能希望合并)提供哈希或标识符作为参数。然后,你会得到一个类似这样的编辑器:

pick 0000001 Fixed big bug 1
pick a000002 Fixed big bug 2
pick dae3124 Fixed big bug 3
pick 3554abc Fixed big bug 4

# Rebase 5cea2cd..8963229 onto 5cea2cd
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

然后,您可以编辑此文件,使其具有以下内容:

pick 0000001 Fixed big bug 1
squash a000002 Fixed big bug 2
squash dae3124 Fixed big bug 3
pick 3554abc Fixed big bug 4

保存文件后,Git会让您编辑压缩到一条消息的提交的日志消息。实际上,您已将0000001,a000002和dae3124合并为“修复了大错误1,2和3”。例如。 (您也可以使用fixup。)您的日志将是:

0014234 Fixed big bugs 1, 2 and 3.
3554abc Fixed big bug 4

(当然,合并提交的结果哈希看起来不像它来自的提交的哈希值。)

在本地完成后,您可以将该分支推送到远程公共存储库。

答案 2 :(得分:1)

问候,

我建议在git上阅读这本免费的书。 ProGit book。它为所有git的功能提供了很好的基础。

要解决您的直接问题,我将引导您访问此页面

http://toolmantim.com/thoughts/setting_up_a_new_remote_git_repository

我在工作中使用这个过程。很棒的工作流我推荐它。

希望这有帮助。