使用 "git svn" 和两个工作树

Using "git svn" with two working trees

我开始在工作中使用 git 作为 Subversion 客户端。现在我一直在使用 TortoiseGit,或多或少是我过去使用 TortoiseSvn 的方式,但是使用 local 提交、分支、合并、变基、挑选。

这是一个大项目,切换分支并重新编译一切都太花时间了。这就是为什么我想要两个(或更多)工作树对应于 Subversion 项目的两个分支。

我想知道是否可以为两个工作树共享 .git 文件夹(它的 5GB),或者我需要克隆存储库或者可能再次从 su​​bversion 检出它(这花了几个小时).

git book 看来,如果两个 git 存储库之间的交互也与 svn 交互,它们将无法正常工作(我不知道这是否适用于我的情况):

Don’t rewrite your history and try to push again, and don’t push to a parallel Git repository to collaborate with fellow Git developers at the same time. Subversion can have only a single linear history, and confusing it is very easy. If you’re working with a team, and some are using SVN and others are using Git, make sure everyone is using the SVN server to collaborate – doing so will make your life easier.

我想要一个包含所有 svn 分支和我所有本地分支的存储库,并且我想要几个工作树以避免在切换分支后需要重建所有内容。这可能吗?

我不太了解 "bare" 或 "shared" 存储库、远程和克隆,设置一个基本示例会很有帮助。

这是我最后做的:

正如 johannes 所建议的,有一个脚本可以解决我在 Linux (http://nuclearsquid.com/writings/git-new-workdir/) 上的问题。但我在 Windows:

  • https://github.com/joero74/git-new-workdir
  • 下载脚本的 Windows 端口
  • 以管理员身份打开 cmd(git 安装了一个 Git bash,该脚本无法使用此脚本,您需要使用 cmd
  • 如果没有,请将 git 添加到路径中。就我而言 set PATH=%PATH%;"C:\Program Files (x86)\Git\bin"
  • 执行脚本。在我的例子中,我有一个名为 Project 的文件夹(其中有一个 .git 文件夹):git-new-workdir.cmd .\Project .\Project2

这将创建一个新文件夹 Project2,其中包含一个工作树和一个名为 .git 的文件夹。这个 .git 文件夹有指向原始项目/.git 的链接,所以如果我做一些 git svn fetch 或创建本地分支或任何东西,两个 "copies" 都会同时更新(没有 pushpull)。工作树是不同的:如果我切换一个分支,另一个不会改变,我可以同时在不同的分支上工作。

我只需要记住原来的.git在哪里,永远不要删除它。