为源于另一个SVN存储库的文件创建外部SVN存储库
我有一份原始subversion repo的工作副本。我想对工作副本中的某些文件进行实验性更改,而不在原始repo中进行分支、标记等 目标为源于另一个SVN存储库的文件创建外部SVN存储库,svn,version-control,tortoisesvn,Svn,Version Control,Tortoisesvn,我有一份原始subversion repo的工作副本。我想对工作副本中的某些文件进行实验性更改,而不在原始repo中进行分支、标记等 目标 能够随时随意指向原作 我们无意将变更合并回原始回购主干 捕获许多离散的“实验”,捕获尽可能少的代码 并将其完全排除在原始回购协议之外 不需要与特定的原始回购版本同步 我希望能够从原始回购协议的工作副本开始,并将特定的文件夹和/或文件定位到实验性回购协议中 细节是魔鬼 我知道外部属性。我认为这是关键,但我一定是误用了乌龟界面,因为我无法解决问题 正在启动
- 能够随时随意指向原作
- 我们无意将变更合并回原始回购主干
- 捕获许多离散的“实验”,捕获尽可能少的代码
- 并将其完全排除在原始回购协议之外
- 不需要与特定的原始回购版本同步
- 我希望能够从原始回购协议的工作副本开始,并将特定的文件夹和/或文件定位到实验性回购协议中
外部
属性。我认为这是关键,但我一定是误用了乌龟界面,因为我无法解决问题
- 正在启动原始回购的工作副本
- 我已经创建了实验性的repo&最小文件夹结构
- “签出”到我要试验的文件夹
- 在目标文件夹上单击鼠标右键/添加。此时,乌龟挂起,然后流产
- 右键单击目标文件夹上的/properties,创建带有本地路径和URL的
属性external
- 右键单击/更新。。。在目标文件夹上,导致tortoise挂起,然后中止
- 试图将该文件夹从原始文件夹“导出”到unversion
- 注意:我没有对原始回购协议的管理员级别访问权限
- 建议我研究一下堆栈溢出
- 建议我用代码库的完整副本创建实验性回购协议
- 能够随时随意指向原作
- 我们无意将变更合并回原始回购主干
- 捕获许多离散的“实验”,捕获尽可能少的代码 并将其完全排除在原始回购协议之外
- 不需要与特定的原始回购版本同步
- 我希望能够从原始回购协议的工作副本开始,并将特定的文件夹和/或文件定位到实验性回购协议中 根据#2,您永远不会将此代码合并到原始代码中。那很好。你可以有树枝,但永远不要用它们做任何事情。根据第4点,你甚至不想同步回原始回购协议。一旦你有了改变,你就不会想要回购协议中更新的东西了 第一点和第三点把我弄糊涂了。你能随意指向原作是什么意思?你的意思是,如果有必要,原始回购协议的变更需要纳入你的回购协议吗?那么,你所说的许多离散实验是什么意思?你的意思是想尝试与原始更改不同的方向吗 是什么阻止您签出基本代码,而只是创建自己的私有存储库 您可以使用分支来进行许多离散的实验,只需从原始代码库一次又一次地分支,您可以通过创建标记来标记原始代码库。只要回到标签上,你就可以随心所欲地回到原始状态 这样行吗
- 让我们看看你想要什么。我要给它们编号,以便以后参考它们
$ # First create the experimental repo
$ cd $HOME/my_repo
$ svnadmin create my_repo
$ # Now let's start it up
$ svnserve -r . -d
$ # Now, let's do a checkout and get some work done!
$ mkdir $HOME/my_workspace
$ cd $HOME/my_workspace
$ svn co svn://localhost my_project
$ cd my_project
$ # This is an empty directory. Let's fill it up!
$ svn mkdir trunk tags, branches
$ cd truck
$ # Now, get the revision you want and put it in your repository
$ svn export http://server.com/src/trunk/project .
$ # We have all of the code, let's add it to our repository
$ svn add *
$ cd ..
$ svn commit -m"Original code" #This is your original
$ # Now, we'll mark the original, so you can get back to it
$ svn cp -m"Tagging original" svn://localhost/trunk svn://localhost/tags/ORIGINAL
现在,您有了自己的存储库,因此您的更改不会显示在原始存储库中。而且,您可以通过查找original
标记返回原始源代码
让我们做三个实验
$ svn cp -m"Experiment #1" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_1
$ svn cp -m"Experiment #2" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_2
$ svn cp -m"Experiment #3" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_3
注意我是如何从我的ORIGINAL
标记分支的吗?这样,我知道我回到了我的原始代码。请注意,每个实验都使用分支。我可能永远也不会融入其中,但那很好。没有人说你必须从一个分支合并到下一个分支
而且,在完成实验后,您始终可以删除分支:
$ svn delete svn://localhost/branches/experiment_1
这仍然在存储库中,但是在头部执行svnls
时,您将不再看到它。但是,如果需要,它仍然可以访问。它使杂乱无章的东西远离树枝,但如果你再次需要它,它仍然可以使用
因此,不必担心外部,只需创建一个新的存储库,导入代码,就可以享受其中的乐趣
然而,当有人想在我的系统上做类似的事情时,我通常会劝阻他们,并给他们一个分支,他们可以在原始存储库上使用。例如,我可能给bob一个名为/branchs/bob/trunk
,branchs/bob/branchs
branchs/bob/tags
。这样,它的标志是,这是鲍勃的私人区域,他可以玩,做任何他想做的事。同时,Bob可以一次又一次地从回购协议中获取代码,甚至可以捕获更新的代码。如果很多人想这样做,我会在初始层次结构中添加一个私人文件夹:
/trunk
/branches
/tags
/private
并在/private下为每个用户提供自己的目录。我有一个预提交钩子,可以防止用户接触其他用户的代码。通过将所有内容保存在存储库中,我们有了更大的灵活性。用户可以共享代码,进行不同的修改,并四处玩。我从来没有在主存储库中保存私人实验的问题。#3是最让我困惑的地方。@radarbob是否想阻止其他人看到他的变化?原始回购协议是神圣不可侵犯的。