1

これまでの数年間、私はすべてのコーディングプロジェクトでGitを学んで楽しんでいました。私はすべての変更の明確なタイムラインを持っていて、いつ変更が行われたのかが気に入っています。Gitリポジトリを自動的に構築するプロジェクトのフォルダコピーバージョンのリストを入力しますか?

私はGitの使用に先立つ古いプロジェクトを開いています。私は基本的に、私が作ったそれぞれのコミットのためのフォルダのリストを持っています。一緒に私は70以上のバージョンがあります。私はこのプロジェクトを簡単に保存しながら、驚異的なスペースを無駄にせずにすべてのステップを保ちたい。

これを行う自動化された方法はありますか?私は自動的に基本的に従ってやりたいと思っています:

フォルダ:

- '2013_08_01' 
- '2013_08_04' 
- '2013_08_12' 
- ... and many many more (*~70) 

Gitのレポ(単一の分岐)にインポートするには:手動でこれを行うことがないと

- Base commit A (+ note of date) of '2013_08_01' 
- Commit B with changes (+ note of date) of '2013_08_04' 
- Commit C with changes (+ note of date) of '2013_08_12' 
- ... 

、何だろうこれを達成するための速い方法でしょうか?すべてのフォルダは同じローカルディスク上にあります。

+0

をやりたいだろう。しかし、これはむしろ短いPythonスクリプトでなければなりません。 –

答えて

0

ここで仕事をしなければならない、私は一緒に投げたスクリプトです:

#!/bin/bash 

source=$1 
dest=$2 

cd $dest 
git init 

cd $source 

for i in * 
do 
    cd $dest 

    # Remove old version, see https://stackoverflow.com/a/22347541/2747593 
    git rm -rf . 
    git clean -fxd 

    # Add next version. 
    cp -R $source/$i/. ./ 
    git add -A 
    git commit -m "Auto import to Git, from folder $i" 
done 

ランそれはよう:

script.sh /path/to/source /path/to/dest 

あなたが代わりにcpmvを使用することができますが、私は/.heardを持っています構文はmvでは機能しません。 (また、cpを使用すると、間違ったことが起こったとしても元のファイルは元のファイルに残ります)

プロジェクトの種類によっては、追跡したくないファイルがいくつかある可能性がありますGit。 (例:バイナリ)古いコピーをインポートする前に.gitignoreを追加することができます。もしそうなら、それに応じてスクリプトを修正してください。

@Vampireのおかげで、オリジナルスクリプトのバグを指摘できました。

+1

'cp $ source/$ i/。/ 'は正しく動作しますか?ここでは '2013_08_01/.'が省略されているだけです。おそらく 'cp -r $ source/$ i/'を意味しています。 /私の解決のように?また、ファイルが削除された場合は処理しません。あなたのスクリプトで彼らはディレクトリに住んでいたでしょう。 Btw。なぜあなたのスクリプトで 'pushd'をやるのですか? – Vampire

+1

'for i in * 'は' $ dest'のファイルとディレクトリをリストしていて、削除されたファイルを扱わないので、もう使えません。 Btw。 'for i in *'はソートされたディレクトリをリストしますか? – Vampire

+0

@ヴァンパイアおっと、はい、私は 'cp -r'を意味しました。 'pushd'は以前の試みから残され、修正されました。 –

1

このワンライナーを使用すると、それはgitのはまさにそれを行うための自動化された方法を提供することは考えにくいのです

git init repo && ls -1d 2* | sort | xargs -i[] sh -c 'find repo -mindepth 1 -not -path repo/.git -not -path repo/.git/\* -exec rm -rf {} + && cp -r []/. repo/ && git -C repo add -A && git -C repo commit -am "Commit version []" && git -C repo tag "[]"' 
関連する問題