git-svn ...更像是蜗牛邮件

时间:2017-05-10 15:39:43

标签: git svn git-svn

今天在工作中我需要使用git-svn克隆某个项目,因为某些约束,我以前执行的命令是git svn clone -T --no-minimize-url URL_OF_THE_REPO。长话短说......这已经非常轻松了,并且由于git中的一些错误也可靠地失败...这自然让我通过重新启动命令继续克隆,我不能只是离开它并知道它我回来时会完成克隆工作。因此,将其作为夜间工作是不可能的。

  1. 为什么以上帝的名义这么慢,
  2. 如何加快(结帐)流程,
  3. 我如何计划夜间工作来完成这些繁重的克隆工作,并确信他们会在早上完成(我重申,我必须密切注意结账,以防万一);

3 个答案:

答案 0 :(得分:1)

1我认为这是因为svn不是按照git的工作方式设计的(使用被压缩并在单个块中发送的对象)。 git-svn必须通过修订进行修订,以将svn branches / tags的内容复制到git等价物中。

2和3是相关的:你可以尝试要求获取过程从你已经检索过的修订开始,这样git-svn就不必每次都从头开始。你可以做def bfs_expand(node, queuey, test_states): # Node Queue List -> Queue List # If legal move and not already in test states create and put children nodes # into the queue and their state into test_states. Return queue and test states # Copy original path, depth, and state to separate variables original_path = node.path_to_node original_depth = node.search_depth original_state = node.current_state # Check if up is legal, if so add new node to queue and state to test state if node.is_legal_move('Up'): up_state = original_state a = up_state.index(0) b = a - 3 up_state[a], up_state[b] = up_state[b], up_state[a] if up_state not in test_states: test_states.append(up_state) up_node = Node(original_path + ['Up'], original_depth + 1, up_state) queuey.put(up_node) print(test_states) print(original_state) 之类的事情。

答案 1 :(得分:1)

  

为什么以上帝的名义这么慢,

因为在Git中你总是克隆一个完整的存储库,而不仅仅是一个提交。这意味着,要进行完整的git-svn克隆,git-svn必须单独下载每个SVN修订版并将其转换为Git提交。这只需要时间。这是我不鼓励每个人使用git-svn进行一次性迁移的原因之一,但只推荐git-svn作为SVN的前端,您需要从Git克隆返回SVN服务器,是git-svn创建的。

  

如何加快(结账)流程,

结帐过程很快。我想你的意思是克隆/获取过程。那么使用git-svn时你只能做两件事。

  1. 如果可能,请在SVN服务器计算机上执行cloning / fetchin,这样可以节省协议开销和网络延迟。但请确保使用正确的参数组合,以便最终在提交消息元数据中使用远程SVN URL,否则您将在以后从工作站更新/提交时遇到问题。

  2. 做一个"浅"克隆。您可以告诉git-svn要获取哪些修订版。因此,如果您对git-svn克隆中的完整历史记录不感兴趣,请告诉clone命令从哪个修订版开始。如果你e。 G。只获取最后5次提交,你需要几秒钟才能完成。

  3.   

    我如何规划夜间工作以进行这些沉重的检查,并确信他们会在早上完成(我重申,如果失败,我必须密切注意结账)

    一旦克隆命令开始实际获取SVN修订版,您应该能够使用git svn fetch恢复该过程。所以只需循环git svn fetch直到克隆完成,如果它完成。我写 if ,因为它可能会遇到git-svn中的错误或某些不兼容的错误,例如可能使该进程在同一修订版中可靠地失败的命名分支或标记。在这种情况下,你必须手动处理它,因为恢复将无法正常工作。

答案 2 :(得分:0)

你可以初始化(不完全克隆)repo为空。

编辑repo .git / config以过滤分支和标记以获取。

然后获取。