在使用 git svn clone 命令时,使用 --no-metadata 选项会有什么优势?

32

我正在使用git svn clone进行从SVN存储库到Git存储库的单向转换。大多数示例都使用--no-metadata标志进行此操作-使用此标志是否有优势?

我了解该标志会删除SVN修订号。我可以想到保留这些号码可能有用的原因(例如在错误跟踪软件中引用特定提交)。那么,有没有使用--no-metadata 标志的理由呢?是否除了断开所有联系的感觉外,还有其他好处呢?


1
元数据是用于将信息从git返回到subversion的。如果您永远不需要这样做,那么您就不需要元数据。 - Thorbjørn Ravn Andersen
2个回答

23
使用--no-metadata的一个论点是它不会改变您的提交消息。因此,即使从不同位置获取,提交消息也将保持不变,因此提交哈希值也将保持不变。

举个例子,如果我使用git svn init从本地file: URL初始化一个repo,然后从https: URL拉取,由于所有带有git-svn-id: file:///... 的提交都会被作为 git-svn-id: https:///... 获取并编码为新的SHA1,因此仓库中的所有提交都将被复制一遍。

如果我指定--no-metadata,那么提交消息和这个sha1将保持不变,并且我可以从本地文件系统或svn服务器获取,因为在git存储库中只会有任何给定svn提交的单个副本。

就我个人而言,我更喜欢有一个最小元数据选项,记录子版本修订号,但不包括完整的元数据,但如果不用git-filter-branch乱搞,我们只能选择全有或全无。


1
元数据可能引起的另一个问题是,当Git认为应该从不同的根目录创建提交时,例如/project/trunk/project之间的区别。这可能会导致在Git中提交是不同的,即使它们在SVN中是相同的。 - jpmc26

10

实际上不建议使用这个选项:

这个选项并不被推荐,因为它会使得在现有文档、bug报告以及档案中追踪旧的SVN版本号变得困难。如果你计划最终将代码库从SVN迁移到git,并且确定放弃SVN历史记录,请考虑使用git-filter-branch(1)。filter-branch还允许重新格式化元数据以便阅读,并重写非“svn.authorsFile”用户的作者信息。


25
这完全没有回答问题。我们知道这并不被推荐,但它确实存在;使用它有什么意义,可以起到什么作用?有什么理由想要使用这个选项呢? - thecoshman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接