这是我目前用于我的svn项目的工作流程(我从不使用svn分支,有些项目也被其他人积极处理):
git svn fetch可能需要数小时的初始值.还要创建一个"构建"分支.git clone srv://project.git, git checkout build然后git update-refs ..., git svn fetch恢复到svn存储库的链接git push build服务器并在Hudson中为该分支触发构建git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build输入svn externals.我已经在这里尝试了每个脚本,但所有脚本都失败了.我的外部设置如下:
/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file
Run Code Online (Sandbox Code Playgroud)
并且脚本执行诸如尝试/path/to/x在文件系统的根目录中创建的内容git svn fetch /path/to/x.单个文件似乎也会导致更多问题.(子问题1:这些脚本的svn:externals格式是为什么编写的?)
它似乎很难修改其中一个脚本来处理我的情况并复制我正确的目录结构,但后来我遇到了一个主要问题:如果我更改了x和y/z中的文件目录,我没有看到将其加入单个svn提交的方法,这是我开始首先使用git的原因之一.
因此,问题是:有没有办法可以复制上述工作流程,只使用某个svn存储库的某些部分,这样我就能在root中执行svn dcommit?我更喜欢一个可以在linux和windows上运行的现成解决方案.
编辑我很快就通过我找到的一个脚本入侵了它,并使它复制了svn externals的目录结构.我不能克隆单个文件,这里是输出:
git svn clone -r HEAD …Run Code Online (Sandbox Code Playgroud) 当你签出一个包含svn externals的git存储库时,它会忽略它们.人们所做的是创建许多脚本,其中许多脚本在这个问题中提到我如何使用git-svn保持svn:external是最新的?.问题是虽然许多脚本都浮在互联网上,但我还没有找到一个实际上很强大的脚本.通过健壮,我的意思是:
因为这些是我的存储库的2个问题,似乎会导致大多数脚本失效.我没兴趣使用smartgit.
有这样的剧本吗?有没有人有一个"几乎存在"的脚本可以很快适应这两件事?
我想使用git来克隆一个svn存储库,但不幸的是,在哪里svn checkout得到所有外部的repo,git svn clone只获得没有外部的存储库.如何通过svn存储库获取外部git svn?我不想做任何花哨的东西,只需要获得外部的complet repo.
我们正在测试使用git作为存储库系统而不是我们的普通svn.我们总是需要一个svn存储库.在svn中,我们将此存储库与svn propset链接为svn:externals.这确保了该特定的,使用频繁的存储库实际上只有一个全局副本.
既然我们有git存储库,我想将SVN存储库链接到它,其方式与svn:externals基本相同.我有点成功地做到了这一点.我是git的新手,请原谅任何无知.
在纯git repo(我通过克隆git clone gitmaster@address.org:mygitrepo)我用过:
git svn clone svn+ssh://svnowner@hostname.org/path/to/mysvnrepo mysvnrepo
Run Code Online (Sandbox Code Playgroud)
获取其他svn存储库的副本.这很好用,我可以通过git svn rebasemysvnrepo目录获取SVN repo的新版本并通过提交更改git svn dcommit.
要将它与我使用的主git存储库结合起来:
git add mysvnrepo
git commit mysvnrepo
git push
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果我现在克隆其他地方的git repo(再次使用git clone gitmaster@address.org:mygitrepo),当我得到包含所有文件的mysvnrepo目录时,我无法与SVN repo交互.我得到错误:"无法在git svn rebase之后确定工作树历史记录中的上游SVN信息".可能相关,当我在其他地方克隆它时,mysvnrepo目录中没有.git文件夹(这是svn信息存储在原始repo中的地方).
我已经搜索了一下这个问题,但所有对它的引用似乎都让svn repo首先出现问题,而我的问题是让它为另一个用户工作.
也许我的问题是如何成功添加/提交/推送svn repo到git repo?即是:git add mysvnrepo; git commit mysvnrepot; git push; 这样做的正确方法?
编辑:改进以提供更多上下文
我一直在使用git-svn从svn克隆的git repo在本地工作.我现在需要从不同的svn repo中添加一些代码.代码是模块化的,因此新代码将位于不与现有代码重叠的新子目录中.我在本地开发环境中使用git-svn,登台服务器是svn checkout,而实时服务器是svn导出.
在某些情况下,我正在开发两个独立的Drupal站点,每个站点都有自己的svn repo.站点A有一些自定义模块,现在需要添加到站点B.管理单独站点和回购的最佳方法是什么?
看起来我可能最好设置第三个单独的svn repo,其中包含站点之间共享的模块.如果是这样,在单个项目中使用两个单独的回购的最佳方法是什么?
编辑:我特别感兴趣的是其他人如何在多个站点上混合Drupal贡献模块和自定义模块时处理版本控制.我如何改进第一段最后一句中描述的设置?