https://docs.github.com/en/github/importing-your-projects-to-github/updating-commit-author-attribution-with-github-importer事先说好,但如果我等到做完之后https://github.com/new/import, 将要https://github.com/painingattention/realityl/import/authors还有效吗?
我很纠结于是否保留我原来的“提交名称”(因为紧迫性https://community.atlassian.com/t5/Bitbucket-articles/What-to-do-with-your-Mercurial-repos-when-Bitbucket-sunsets/ba-p/1155380/page/20我很着急),或者让 Github 做任何可怕的模糊隐藏的自动魔法编码。
另外,您可以更改为原始的“提交名称”关联并返回吗,或者这是否会出现错误?
原始名称的格式(之前或之后)是否完整/保留在历史记录中(“匹配作者”更改/自动化是否直接归因/记录为其自己的 Git 条目,或者这是存储库或 UI 行为更改、用户端或服务器端问题?)?
(个人观点是我写了唯一的提交名称并注意到“匹配”转换可能隐藏了该工件,我提交时的原始命名是否仍然保存或隐藏为转换工件?)
答案1
简短的回答是“不,它不起作用”...但详细的回答是:
首先,GitHub 有两种不同的作者映射:
在导入时,你的提交实际上并未映射到 GitHub 帐户 - 它们仅映射到所采用的“全名 <email>”从用户的 GitHub 个人资料。
本文作者映射不能以后很容易更改。作者信息直接嵌入在生成的 Git 提交中,提交后通常被视为不可改变。这就是为什么这个功能仅起作用导入时非 Git存储库——它实际上是格式转换过程的一部分,并且只能在生成 Git 提交时完成,而不能在之后完成。
在显示时,每当 GitHub 需要显示用户个人资料的链接时,它都会按照以下方式进行仅有的Git 提交中存储的电子邮件地址。(此步骤没有其他魔法,它始终基于电子邮件地址。)
无论 Git 提交中存储的实际作者姓名是什么,GitHub 都只会忽略并将显示您 GitHub 个人资料中的名称。
总的来说,这意味着作者姓名不需要与 GitHub 帐户匹配,只需与电子邮件地址匹配。因此,如果您的原始 Hg 存储库已经有正确的作者地址,则您根本不需要应用任何导入时映射。
(我假设您的原始存储库是 Hg 格式,因为如果它是 Git 格式,那么导入器根本不会提供重新映射 - 它只会获取存储库的精确副本,仅此而已。)
我的建议是:
用于
hg log
检查您原始提交中存储的电子邮件地址,并确保相同的地址添加到您的 GitHub 个人资料中。允许 GitHub 的导入工具执行此操作,但是不要应用任何作者映射,只允许它保留所发现的任何内容。
使用 下载存储库
git clone
,然后使用git log --format=fuller
检查存储在生成的 Git 提交中的全名和电子邮件地址。如果导入结果不佳,或者原始提交包含垃圾电子邮件地址,则可以通过重建存储库并使用
git push --force
上传“修复”版本来修复此问题。(这类似于 Hg 从存储库中“剥离”所有提交。)
尽管我说过 Git 提交的作者身份不能轻易改变,但是无论如何,改变它的方法——只需要重写整个存储库。两种常用的工具是git filter-repo
和较旧的git filter-branch
。或者你甚至可以使用完全不同的工具重新从 Hg 导入,例如使用git 远程控制(即使 BitBucket 完全关闭后也可以完成此操作;您所需要的只是一个本地 Hg 克隆。)
由于每次重写都会更改您的所有提交 ID,因此您只应在 Git 存储库仍然很新时(即人们尚未真正开始使用它)执行此操作。