3

git fast-import --export-marks 能够导出将标记与其创建的提交哈希相关联的文件。

到目前为止,我看到标记不是输入中提供的标记,而是一些与输入无关的“内部标记”。

如果它保留原始标记,对于导入/导出互操作来说不是更好吗?

4

1 回答 1

4

导出的标记的目的fast-import是列出提交和 blob 以供后续验证和同步。导入标记的目的是fast-import在增量导出-导入场景中跳过提交。

╔════════════════╦════════════════════════════════ ══╗
║ ║ git 快速导出 ║
╠════════════════╬════════════════════════════════ ══╣
║ --import-marks ║ 1) 在导出期间提交跳过 ║
║ --export-marks ║ 2) 导出的提交 ║
╚════════════════╩════════════════════════════════ ══╝
╔════════════════╦════════════════════════════════ ══════╗
║ ║ git 快速导入 ║
╠════════════════╬════════════════════════════════ ══════╣
║ --import-marks ║ 3) 在导入期间提交跳过 ║
║ --export-marks ║ 4) a) blobs ║
║ ║ b) 导入的提交,同 (2) ║
╚════════════════╩════════════════════════════════ ══════╝

您可以从上面的表格中看到在 repos 增量同步的情况下如何组合标志。可以导出一个 repo,将其导入其他地方,然后通过跳过以前导出的提交来创建增量导出文件,或者通过跳过已知提交来创建完整导出和增量导入。

这是一个简短的例子来澄清。

$ cd /tmp && git init example && cd example &&  touch README && \
git add README && git commit -m "first commit"
$ git fast-export --all --export-marks=/tmp/example-repo.marks > /tmp/example-repo.export
--- /tmp/example-repo.export ---
blob
mark :1
...
reset refs/heads/master
commit refs/heads/master
mark :2
...
reset refs/heads/master
from :2

--- /tmp/example-repo.marks ---
:2 610432e74c554d783ff5f9edd1bb18548d68e533

仅导出了一个标记,即添加到存储库中的单个提交的标记。

$ git show 610432e74c554d783ff5f9edd1bb18548d68e533
commit 610432e74c554d783ff5f9edd1bb18548d68e533
...

当您继续重新创建存储库时,导出的标记不仅会列出提交,还会列出新的 blob。这些新的 blob 已重新创建,并出现在标记中供您检查,还列出了提交以与所有导入引用的提交进行比较。

$ cd /tmp && git init example-import && cd example-import && \
cat /tmp/example-repo.export | git fast-import --export-marks=/tmp/example-import-repo.marks

--- /tmp/example-import-repo.marks ---
:1 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
:2 610432e74c554d783ff5f9edd1bb18548d68e533

该 blob:1已重新创建并新列在标记文件中(使用恰好是 的第一个可用标记:1),但请注意,标记的提交:2保留了其标记和原始导出存储库中的哈希值。

于 2014-01-06T09:03:41.410 回答