我是 Mercurial 用户。由于我不会进入的原因,我正在迁移到 git。
我主要是一个开发团队,尽管未来存在合作者的可能性。我过去曾使用 Mercurial 来跟踪更改,并在我的笔记本电脑和大学集群上管理相同代码库的开发。
在 Mercurial 中,为了让我的笔记本电脑和集群保持最新,我会在我的笔记本电脑上创建一个存储库,将其克隆到集群,然后从(如果我一直在使用笔记本电脑)推送或拉到(如果我一直在集群上工作)我的笔记本电脑并根据需要合并。
我已经成功地将我的 mercurial 存储库迁移到了 git。通过阅读网络上的许多 git 讨论,看起来我当时(解释http://thelucid.com/2008/12/02/git-setting-up-a-remote-repository-and-doing-an-initial-推/ )
ssh me@university_cluster.edu
mkdir my_project.git
cd my_project.git
git init --bare
git update-server-info # I skipped this
exit
然后在我的笔记本电脑上:
cd my_project
git remote add origin me@university_cluster.edu:my_project.git
git push -u origin master
那么我的问题:
这似乎比在 Mercurial 中更复杂。这真的是“最佳实践”方法吗?我认为分布式源代码控制 (DSC) 的整个想法是存储库直接相互通信并且合并很容易。为什么使用 git“裸”存储库的“中间人”方法?似乎这导致必须在远程机器上维护两个目录(裸存储库和工作存储库),并且每次我需要从一个平台切换到另一个平台时执行两倍的“事务”。也就是说,每台笔记本电脑<->集群切换都涉及推送到远程裸存储库,然后从远程裸存储库中拉取,在此之前我只是推送(如果在我的笔记本电脑上完成)或拉取(如果在我的笔记本电脑上启动)。
我希望我不是在邀请 Mercurial/Git 火焰战争,我只是想以此来理解 git 哲学。