Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 将代码与两个subversion存储库同步_Svn_Version Control_Synchronization - Fatal编程技术网

Svn 将代码与两个subversion存储库同步

Svn 将代码与两个subversion存储库同步,svn,version-control,synchronization,Svn,Version Control,Synchronization,首先介绍一下背景知识: 我使用的是来自远程SVN存储库的“基本”代码,不在我的控制之下。代码还没有标记,所以我总是需要跟上主干 出于许多原因(最重要的是我们对代码的本地扩展具有“利基”性质,旨在解决使用代码的项目的特定问题),我不能使用远程存储库对我在本地进行的任何修改进行版本控制 我有一个本地SVN存储库,目前正在其中执行“本地”版本控制 我面临的问题是:我不知道是否有一种好方法可以让代码同时与两个存储库同步。也就是说,我希望保留“远程”版本信息(以便在将来的更改中合并),但我也希望同时拥

首先介绍一下背景知识:

  • 我使用的是来自远程SVN存储库的“基本”代码,不在我的控制之下。代码还没有标记,所以我总是需要跟上主干

  • 出于许多原因(最重要的是我们对代码的本地扩展具有“利基”性质,旨在解决使用代码的项目的特定问题),我不能使用远程存储库对我在本地进行的任何修改进行版本控制

  • 我有一个本地SVN存储库,目前正在其中执行“本地”版本控制

我面临的问题是:我不知道是否有一种好方法可以让代码同时与两个存储库同步。也就是说,我希望保留“远程”版本信息(以便在将来的更改中合并),但我也希望同时拥有“本地”版本信息(即,在相同的目录结构中)

目前,我正在使用两个不同的目录进行此操作,两个目录都包含相同的代码,但每个目录都包含不同的版本控制信息。显然,这是相当大的开销,特别是因为两个目录中的代码需要独立同步


在subversion中有这样做的方法吗?或者您对其他方法有何建议?

您可以在本地存储库中提交更改,就像您已经做的那样。此外,您还需要定期从基本存储库进行合并,以便将在基本主干中所做的更改合并到本地存储库中

唯一困难的是,您需要跟踪已从基础存储库中合并的修订

这可能是这样的:

svn merge -r X:Y baseRepositoryURL // merge from base repo
svn commit                         // commit the changes to local repo
svn merge -r Y:Z baseRepositoryURL // merge from base repo
svn commit                         // commit the changes to local repo

其中X是初始签出的版本,Y是第一次合并时的头部版本a,Z是第二次合并时的头部版本a。你看到了模式。此外,在发出命令时,您必须位于本地签出的基本目录中,这一点很重要。

我使用git svn完成了这项工作,并在git存储库中完成了开发。远程开发是在subversion中完成的。我制作了subversion存储库的git svn克隆,并将其推送到真正的git存储库。cronjob时不时地运行“git-svn-rebase&&git-push”来创建subversion-repo的git镜像

为了合并subversion更改,我在本地git副本中有两个远程版本——“本地开发”版本和“来自subversion镜像”版本。只要我觉得有必要,我就可以将subversion镜像中的更改合并到我们的开发树中。本地更改不受影响,它们分开居住,不会弄乱svn镜像

我曾经设置和管理git存储库。步骤如下(根据记忆,可能是错误的):


Git看起来令人印象深刻。在我看来,你可以做的比svn多得多。谢谢,我想这几乎正是我想要的。去学习git吧!Boutta,svn能做什么git做不到的?我陷入了一个类似的情况,需要同步两个svn回购。我尝试了您的指示,但我经常得到“bash:git receive-pack:command-not-found”。有什么想法吗?你在服务器上安装了git吗?安装的bin dir是否在$PATH中?我在git 1.6.0.2中使用它,也许git receive pack已经更改了名称?这可能比我现在所做的更容易维护,但仍然需要“手动”版本管理。。。无论如何,感谢您的建议,在使用git之前,我们将至少尝试几天:-)如果两台HSVN服务器都有1.5版,那么就不再需要手动跟踪修订。但仅在SVN 1.5下
# set up the mirror
git svn clone -s $SVN
git remote add origin git@$MACHINE:svnmirror.git
git push
# + cron job to do git svn rebase && git push every N hours/minutes

# set up the local working copy for development
git clone git://$MACHINE/svnmirror.git
# that's an anonymous, read only clone 
# no push to the svn mirror for developers - only cronjob user can push there
git remote add newproject git@$MACHINE:myproject.git
git push newproject
# now do the real deal
git clone git://$MACHINE/myproject.git
# hack hack hack
git push # origin master not needed
git remote add svnmirror git://$MACHINE/svnmirror.git
git merge svnmirror/master
git push