![在多个主机上使用共享 git 工作区](https://linux22.com/image/1411396/%E5%9C%A8%E5%A4%9A%E4%B8%AA%E4%B8%BB%E6%9C%BA%E4%B8%8A%E4%BD%BF%E7%94%A8%E5%85%B1%E4%BA%AB%20git%20%E5%B7%A5%E4%BD%9C%E5%8C%BA.png)
我正在将我的个人项目从使用 subversion (svn) 转换为 GIT。在 subversion 中,我在多个主机上使用了一个共享的 SVN 工作目录(尽管有人告诉我它不起作用),事实证明它对我来说效果很好。需要指出的是,这是一个单用户解决方案,我是唯一进行更改的人,因此我不会同时在多个机器上运行 SVN 提交。简而言之,我愿意忍受一些限制(如果必要的话),以简化我的个人项目的整体管理。
要理解我为什么要这样做,请考虑我的配置(如下)。我有几台强大的机器,每台都运行着几台虚拟机。我在“host1”上有几个大磁盘,并且有其他主机(在本地 LAN 中)访问的文件共享。
host1 (share \\host1\share)
+vm1 (access SVN working dir \\host1\share\svnproj1, and svnproj2)
+vm2 (access SVN working dir \\host1\share\svnproj1)
+vm3 (access SVN working dir \\host1\share\svnproj1)
host2
+vm4 (access SVN working dir \\host1\share\svnproj1)
+vm5 (access SVN working dir \\host1\share\svnproj1)
laptop (access SVN working dir \\host1\share\svnproj1)
But also have a svn checkout at c:\svnproj1
所有操作系统都是 Win7x64 或 Win8.1x64。我目前正在使用 Tortoise SVN 1.8.2 和 subversion 1.8.3(在所有主机上)。
这种方法让我可以从任何主机访问服务器的文件共享 (\host1\share)。在某些情况下,我的 svn 存储库已有多年历史,并且每个 VM 中都有超过 2 GIG 的单独“SVN 工作区”,这使我的 VM 变得更大,并使我的 VM 快照和备份变得复杂。
我也不必提交文件,直到我带着笔记本电脑去参加商务会议。我在家工作,所以这种情况并不常见。当我从商务会议或旅行回来时,我会在笔记本电脑上提交更改,并在 5 个虚拟机中的任何一个上运行 svn update,然后所有 5 个虚拟机的文件都会更新。对我来说,这很简单,而且效果很好。
所以现在我想知道这种方法是否可以使用 GIT。我读过的所有内容都说你不能(或不应该这样做)。
这是我的问题,它们将帮助我了解这在技术上是否可行(注意:我已经在尝试这种方法)。
(问)GIT 是否将信息存储在 GIT 存储库(.git 目录)之外的主机上,并且需要该信息才能正确管理 git 存储库。如果是,那么使用这些信息配置多台机器是不可行的。
(问)GIT 会在 GIT 工作区内创建临时文件吗?如果会,那么临时信息会破坏在另一台机器上运行的另一个 git 副本吗?如果会,那么这种方法同样不可行。
(问)GIT 是否存在与 Subersion 相同的问题,即使用给定 repo 的所有客户端都需要是同一版本?
(问)如果引入其他操作系统(Linux、Apple OSX)这种方法会失败吗?
(问)如果使用 Dropbox 或 SpiderOak 等云存储提供商,此解决方案仍然有效吗?
(问)使用 GIT 时我可能会遇到哪些使用 SVN 时不会遇到的问题?
再次强调,需要注意的是,该解决方案只需要为我工作,永远不会有多个人对 GIT 存储库进行更改,并且如果它简化了虚拟机的整体管理,我可以忍受一些限制。
本文http://www.sitepoint.com/how-to-use-dropbox-with-svn-or-git-for-cloud-source-control-management/很好地解释了如何以传统方式使用 GIT。对我来说,Dropbox 解决方案相当于本地 LAN 文件共享。
答案1
它应该没有问题。只需将您的 git repo 放在 host1 上您当前的 svn 工作目录所在的位置即可。我做过类似的事情,我使用 Dropbox 在几台计算机之间共享一个 git repo(这实际上比您所说的更不可取,因为如果无法同步,Dropbox 将创建该 repo 的单独版本)。
以下是对您所提问题的解答。
.gitconfig
您的主目录中的文件夹中存储了一些信息,但所有这些信息都会被.git
文件夹中的任何配置信息所取代,这些信息是完全可移植的。这不会造成任何问题。有一件事 - 请小心在所有系统上为行尾选择相同的选项,或在.git
文件夹中进行配置。- 没有(至少就我所知没有)。所有修订都存储在 .git 文件夹中,工作副本只是常规文件。
- 最好他们都运行相同版本的 git,这样你就不会遇到奇怪的错误,但可能如果它们是不同的版本并且您只执行了基本任务,则不会造成问题。
- 由于文件夹相同,因此操作系统不会产生差异
.git
。只需为行尾选择适当的选项,然后在所有系统上选择相同的选项。 - 是的,我在 Dropbox 上做过。唯一的问题是 Dropbox 同步失败并创建了与你的存储库有冲突的副本。然后你就得费劲去弄清楚哪个有你最近的提交。这不适用于多个用户同时访问,因为每个用户都需要自己的工作副本。
- 没什么大不了的。不久前,我在我的个人项目上进行了切换,一切进展顺利。如果您愿意,有一些工具可以帮助您将 svn 历史记录导入 git。
答案2
git 的理念是不中央存储库,每个存储库(甚至是台式机上的存储库!)都具有同等地位。您可以将其中一个指定为“主存储库”,但这是惯例/工作流程。
您可以在存储库之间自由地获取/推送更改。您可以管理大量分支(是的,它们可以工作,并且非常轻量级)、合并、挑选更改、将一个分支嫁接在另一个分支之上(git 将确保更改正确合并 - 希望它理解“更改的行”而不是“重新思考的概念”)。您可以拥有私有分支(即,策划一些疯狂的计划;如果它有效,则将其提升为官方并发布 - 推送给其他人,到 master -;如果不行,没有人会更明智)。