1

我是 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 哲学。

4

1 回答 1

2

当您推送更改时,Git 不会更新远程仓库的工作副本。(这让很多事情变得更简单,并且远程仓库的所有者没有在他面前更改文件。)非裸仓库会看到它的头部和工作副本与每次推送都不同步。所以 Git 不会推送到非裸仓库,除非你强制它。

于 2013-11-02T00:14:31.370 回答