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 如何保持某个git存储库状态始终可访问?_Svn_Git_Tags_Workflow - Fatal编程技术网

Svn 如何保持某个git存储库状态始终可访问?

Svn 如何保持某个git存储库状态始终可访问?,svn,git,tags,workflow,Svn,Git,Tags,Workflow,我正试图为一小群人设计用于数据分析的软件合作规则。重要的是要有一种方法来重现代码在过去某个时刻的运行,即恢复到过去的状态(版本控制应该允许的)。在过去,这对于我们svn来说是可能的。然后,我们可以用运行时使用的svn修订号标记数据分析结果 P>有关于分支、合并和重置的历史,丢失/不可访问/难以达到的噩梦等。同时,对实验特征开发的分支容易处理是使我们考虑从Svn到Git的切换。 那么:我们应该遵循哪些规则来确保我们能够轻松且始终能够检索为给定分析运行的代码状态?是否仅将主分支用于分析运行?如果是

我正试图为一小群人设计用于数据分析的软件合作规则。重要的是要有一种方法来重现代码在过去某个时刻的运行,即恢复到过去的状态(版本控制应该允许的)。在过去,这对于我们svn来说是可能的。然后,我们可以用运行时使用的svn修订号标记数据分析结果

<> P>有关于分支、合并和重置的历史,丢失/不可访问/难以达到的噩梦等。同时,对实验特征开发的分支容易处理是使我们考虑从Svn到Git的切换。

那么:我们应该遵循哪些规则来确保我们能够轻松且始终能够检索为给定分析运行的代码状态?是否仅将主分支用于分析运行?如果是这样,应禁止在主分支机构上进行哪些操作


编辑:下面解释了两个好的建议:重要的提交标记将使分析透明且可复制(antlersoft)。这不需要新的规则,只需要让标签保持安静。此标记工作流不需要重定基址和合并规则。汤姆·安德森(Tom Anderson)的建议很有用,因为中央回购协议应该包含所有附加标签的代码(这将是一个惯例/规则),可以允许其他成员访问这些代码位

您需要遵循的唯一规则是永远不要删除历史记录。这意味着永远不要重定基址,或使用其他一些不太常见的操作

相反,这意味着永远不要在运行分析的存储库中重新设置(etc)。人们可以在其他存储库中自由地重新设置基础。您是否可以建立一个“golden master”存储库,每个人都将代码推送到该存储库,并使用无重基策略来运行您的分析?然后,人们可以在本地随意开发代码,并在准备运行时推送到该存储库。对于使用DVCS的团队来说,这是一个相当正常的工作流


如果人们需要从他们的本地存储库中运行分析(可以说是为了发布),那么事情就更棘手了。我建议每个人在本地都有两个存储库,一个用于开发,一个用于分析。在开发存储库中允许重定基址,但必须将代码推送到要使用的分析存储库(然后推送到团队的其他成员)。这有点弱,因为这是阻止人们在分析存储库中重定基址的唯一惯例,而对于没有人直接使用的中央存储库,重定基址是不会发生的事情。

解决方案不必限制您可以在任何分支上执行的操作。只需使用git标记,不要移除或移动它们。标记用于运行每个分析的提交,并在分析中记录提交标记(这与您在svn中所做的非常类似,只是它不是VCS生成的修订号,而是您提供的标记名)。然后,分析的版本及其所有历史记录将始终可用,而不管您在分支上还做了什么(rebase等)

我知道这条线很旧,但我只想澄清一件事……
重定基址不会删除任何历史记录,也不会删除任何提交。它仅添加新提交并移动分支引用。
只要提交被任何东西(分支、标记或其他提交)引用,它就会永远存在。

只有未引用的对象是旧的(默认情况下为30天),并且您执行垃圾收集或类似操作时,才会删除这些对象。

Git在这些方面比SVN更强大,但可能会让人感到困惑,或者由于无知而导致回购失败(我也做过很多次同样的事情,学到了很多,但有时仍然能够做到。Git是强大的,是的,并且有一个巨大的学习曲线)如果你做一个提交,标记那个提交,然后将那个提交重新设置基址到其他地方会发生什么?标记会移动吗?如果是,那么如果重新设置基址会改变代码的行为(通过将其与其他提交合并,其将),那么标记所标记的行为已经改变。或者标记阻止了你这样做吗?不。标记将旧的提交保留在原来的位置。重新基址最终将它们复制到新的位置。另一个分支也将保留在那里。重新基址没有人们想象的那么糟糕。你只需要了解git的工作原理并保持发布提交ed.@Tom Anderson重定基址不会删除历史记录;一旦在git中创建对象,它就无法更改。如果没有对它的引用,您可能会丢失对它的跟踪。重定基址会将分支的头更改为具有与重定基址前提交不同历史记录的提交,因此在分支上找不到重定基址前提交。H不过,在重新基础之前的提交仍然存在于存储库中;您可以从reflog获取它,或者如果它被标记,则仍然可以从标记中找到它。@antlersoft:aha,所以我怀疑无论什么是正确的,它都仍然存在。为了确保它始终易于访问,我必须标记提交并免疫干扰从随后的重新基址和合并中分离出来,对吗?我认为还没有明确提到:如果你重新基址,旧的提交只会停留在回购中,直到它们被垃圾收集。在提交上添加标记可以防止垃圾收集。这也使提交更容易找到。这听起来是可行的:我可以有一个金大师。Howev呃,人们仍然会从本地存储库运行本地分析。不是两个本地回购,一个可以有两个分支+约定吗?还有,是否有git配置来强制执行回购的无重基规则?git将在重基之前运行预重基钩子;如果该钩子失败,重基将中止。如果你想完全禁止重基,你可以使用/bin/false作为钩子。您还可以禁止重新设置selec的基址