为源于另一个SVN存储库的文件创建外部SVN存储库

为源于另一个SVN存储库的文件创建外部SVN存储库,svn,version-control,tortoisesvn,Svn,Version Control,Tortoisesvn,我有一份原始subversion repo的工作副本。我想对工作副本中的某些文件进行实验性更改,而不在原始repo中进行分支、标记等 目标 能够随时随意指向原作 我们无意将变更合并回原始回购主干 捕获许多离散的“实验”,捕获尽可能少的代码 并将其完全排除在原始回购协议之外 不需要与特定的原始回购版本同步 我希望能够从原始回购协议的工作副本开始,并将特定的文件夹和/或文件定位到实验性回购协议中 细节是魔鬼 我知道外部属性。我认为这是关键,但我一定是误用了乌龟界面,因为我无法解决问题 正在启动

我有一份原始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是否想阻止其他人看到他的变化?原始回购协议是神圣不可侵犯的。