我想将几个目录从一个 git 项目移动到另一个保留它们的历史的项目中。问题是,我看到的所有示例似乎都在展示如何将目录提取到它自己的 git 项目中,并使用 git filter-branch
保存历史记录。是否可以将这些目录从一个存储库移动到另一个存储库,并保留它们的历史记录,如果目标存储库已经有其他版本化文件(与以任何方式移动的文件不冲突)......?
有人可以告诉我一个如何做到这一点的例子吗?谢谢!
最佳答案
用我在 bash 中编写的这个小脚本回答我自己的问题(确保您先阅读它并备份了您的文件):
#!/bin/bash
gitURL=$1
project=$2
srcProjectBaseDir=$3
destProjectBaseDir=$4
# Remove stale checkouts in order to do a clean clone
rm -rf ${srcProjectBaseDir}
git clone --no-hardlinks $gitURL ${srcProjectBaseDir}
cd ${srcProjectBaseDir}
git remote rm origin
# These make sure your extracted module is called as the directory's name.
# If this is of no interest to you, comment out these three lines and you
# should be alright.
mkdir temp
git add temp
git mv ${project}/ temp/
git commit -m "Refactoring: Isolated files for filter-branch."
git filter-branch --subdirectory-filter temp HEAD
git add .
git commit -m "Refactoring: Filter branched."
if [ ! -d ${destProjectBaseDir} ]; then
mkdir ${destProjectBaseDir}
cd ${destProjectBaseDir}
git init
cd ..
fi
cd ${destProjectBaseDir}
git remote add repositoryAbranch ${srcProjectBaseDir}
git pull repositoryAbranch master
git remote rm repositoryAbranch
此脚本基于所见的大部分说明here (添加了一些内容)。
关于git - 将多个目录从一个 git 项目移动到另一个,保留它们的历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952708/