我有一个旧的遗留代码库,其版本保存在以日期标记的目录中...
...
../20110819/
../20120105/
...
几个月前我们转向git,我从旧版本中提取了一些提交作为起点,并且已经开发出来了。
我有两个问题,第一个问题更为重要: 如何将这一系列目录转换为git提交?优选地,这将在脚本中自动化。
其次,我如何添加我重新提交的提交?
答案 0 :(得分:2)
的伪代码:
git init newrepo
for each directory in the proper order (looks like you can just do a numeric sort there, unless there are exceptions to the naming convention)
do
remove everything in newrepo except for .git
copy entire contents of tree into newrepo, without the <date>/ prefix
git add -A .
git commit -m "some suitable message mentioning the date/version"
done
您可以通过正确使用git --git-dir=... --work-tree=...
选项跳过复制,但我通常只针对类似情况做了以上操作(在我完成此操作的情况下,授予所有“版本“正在从一系列档案中解压缩,而不是生活在一系列目录中。”
答案 1 :(得分:1)
我没有明确地测试过它,但是它应该可以工作。复制你的git repo并对其进行测试,这样如果出现问题你就不会丢失任何重要的东西。
#!/bin/bash
LEGACY_PATH=/path/to/legacy/versions
REPO_PATH=/path/to/git/repo
cd ${REPO_PATH}
git checkout -b import-legacy
for V in $(ls -v ${LEGACY_PATH}/*); do
cd ${V}
git --git-dir=${REPO_PATH}/.git --work-tree=${REPO_PATH} add -A .
git commit -m "Import changes from legacy version ${V}"
done
git rebase --interactive master
(reorder your changes, if needed, on top of the last legacy import)
git checkout master
答案 2 :(得分:1)
这个扩展了贾斯汀的答案。之后的rebase程序可能很复杂,所以我没有包含它。它等于git rebase -i newroot master
,但在合并/添加/删除方面存在细微之处。例如,我不得不清理已删除的文件(这些文件不会被删除,因为我们只添加文件)。
如果你像我一样希望这些遗留导入在当前仓库的“提交之前”之前,你会想做git checkout --orphan newroot
#!/usr/bin/python
import os
import sys
import datetime as dt
LEGACY_PATH = '/path/to/legacy'
REPO_PATH = '/path/to/repo'
AUTHOR_NAME = 'Your Author <your@author.com>'
def main():
os.chdir(REPO_PATH)
#We assume you are on the branch where you want to import
#Otherwise the following line will do
#os.system('git checkout --orphan newroot')
subdirs = sorted(os.listdir(LEGACY_PATH))
print subdirs
for d in subdirs:
fullpath = os.path.join(LEGACY_PATH, d)
legacy_date = dt.datetime.strptime(d, '%Y%m%d').isoformat()
cmd = 'git --git-dir=%s/.git --work-tree=%s add .' \
% (REPO_PATH, fullpath)
print '\n', cmd
os.system(cmd)
os.chdir(REPO_PATH)
cmd = 'git commit -m "Import changes from legacy version %s" \
--date=%s \
--author="%s"' \
% (d, legacy_date, AUTHOR_NAME)
print '\n', cmd
os.system(cmd)
if __name__ == "__main__":
main()