在将几个文件从一个GIT存储库移到另一个GIT存储库时,如何保留重命名历史记录?

时间:2019-03-24 17:56:34

标签: git

问题摘要

我需要将几个文件从一个存储库移动到另一个存储库,同时保留其更改历史记录。我已经将它们在源存储库中移到了git mv的专用文件夹中(根据Greg Bauer广泛引用的post,这导致在遵循Greg的脚本时,所有文件夹移动前的历史记录都没有复制到目标存储库中

在每个涉及的存储库中,我只有一个master分支。

对于第一个源存储库,原始文件在移至专用文件夹之前曾经位于根文件夹中。

在第二个源存储库的情况下,(其他)原始文件通常位于一个第一级文件夹中,该文件夹还存储许多其他文件(我不需要移动这些文件)。

目标存储库已经有了我需要保留的其他一些文件和文件夹,以及其提交历史记录。

最后,如果将所有内容正确地复制到目标存储库中,则我需要一种干净的方法来从源存储库中删除(隐藏?)原始文件。

更新2019-03-25 12:00 UTC:有关我的处境的更多详细信息,紧跟torek's brilliant explanation

  1. 我曾经是并且是所有这三个存储库(源存储库和一个目标存储库)的唯一用户;每个源存储库都在单个工作站上使用
  2. 一个源存储库托管在GitHub上;在GitLab的另一个(作为私人项目)。目标存储库作为一个私人项目托管在GitLab上。如果我正确理解“存储库”的具体含义,那么目前还没有“多个存储相同提交的存储库”。
  3. 这些存储库的本地“ .git”文件夹很小。最大的磁盘上只有12 MB,有2.5K个文件。因此,性能似乎并不是一个大问题。
  4. 我最感兴趣的是在目标存储库中看到的是:(a)所涉及文件的基本差异,“前后”; (b)足够重要的是原始变更的时间戳; (c)拥有原始提交人的姓名(总是我自己)
  5. 在将来的情况下,我将需要从私有存储库(包含其他私有文件)迁移到公共存储库,该存储库不应提及这些私有文件或其他内容。但是,在我今天的具体情况中,这并不是个难事。

我考虑过的东西-但未能使用“现成的”:

我不熟悉GIT信息库的结构,因此Stage 1, step 5中的'git ls-files ... | grep ... INDEX_FILE ... git update-index ...听起来像是我的魔力。

answer to another question起,目前尚不清楚是否对已经移到专用文件夹中的单个文件有所帮助(和/或在迁移之前回滚该移动是否安全)。

此外,我该如何决定是否/不使用these steps

git reflog expire --expire=now --all
git reset --hard
git gc --aggressive
git prune

我也在努力从this post中的一组代码片段中编译单个脚本,这似乎也很相关。

0 个答案:

没有答案