1

日付でタグ付けされたディレクトリにリリースが保存された古いレガシーコードベースがあります...

...
../20110819/
../20120105/
...

数か月前に git に移行し、古いリリースからいくつかのコミットを出発点として取り、その上で開発しました。

2 つの質問がありますが、最初のほうがより重要です: この一連のディレクトリを git コミットに変換するにはどうすればよいですか? できれば、これはスクリプトで自動化されます。

次に、作成したコミットを一番上に追加するにはどうすればよいですか?

4

3 に答える 3

1

これはジャスティンの答えを拡張したものです。その後のリベース手順は複雑になる可能性があるため、含めませんでした。に相当しますが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()
于 2013-08-07T17:22:09.143 に答える
1

これを明示的にテストしていませんが、動作するはずです。git リポジトリのコピーを作成し、それに対してテストして、何か問題が発生した場合に重要なものを失うことのないようにします。

#!/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
于 2013-07-22T19:54:25.360 に答える