将文件移动到另一个带历史记录的Git存储库

时间:2016-10-26 11:05:17

标签: git git-filter-branch

我有一个回购。我需要将一些文件和目录移动到另一个仓库。 我设法使用git filter-branch --subdirectory-filter config/deploy -- --all提取目录。

我还需要移动文件config/deploy.rb

怎么做?

2 个答案:

答案 0 :(得分:1)

复制补丁。

正如Tim所暗示的那样,git历史在技术上不能从一个回购转移到另一个回购。但是,由于您无论如何都在重写历史记录,因此您显然希望将文件的历史记录复制到新的仓库中。

我有一些脚本可以执行此操作并且可以正常使用以下警告:

  • 文件从未重命名。
  • 每次执行都会创建新的提交。

为简洁起见,我只列出了剧本的内容:

# git-cp-history
OTHER_REPO_DIR="$1"
FILES="$@"
git-export-history "$FILES" | git-import-history "$OTHER_REPO_DIR"

# git-export-history
FIRST_COMMIT=`git log --format=%H --reverse -- "${FILES[@]}" | head -n1`
git format-patch --stdout "$FIRST_COMMIT"^..HEAD -- "${FILES[@]}"

# git-import-history
cd "$1"
git am

由于脚本被命名为“git- *”并且在我的PATH中,我使用它们是这样的:

git cp-history ../other-repo local/repo/file.txt

答案 1 :(得分:0)

“移动”历史记录

git filter-branch完成后,分支仅包含已过滤的历史记录。您现在可以将分支推送到不同的存储库:

git init --bare ../elsewhere
git push ../elsewhere master branch1 branch2 branch3

现在您有一个裸存储库,其中包含已过滤的历史记录,您可以从中存储克隆新存储库。

包含其他一些文件

如果您在过滤的历史记录中缺少一个文件,则必须重复过滤,以便不排除过滤。