2015-12-05 16 views
10

私はドットファイルリポジトリを持っています。私はサブモジュール(prezto)で別のものをマージしたいので、サブモジュールの不都合なく1つのリポジトリ内にすべてを持つことができます。gitリポジトリをサブモジュールとマージしてサブツリーをマージするにはどうすればいいですか?

どのようにしてプレツトをすべてのサブモジュールでドットファイルリポジトリにマージすることができますか?

私はサブモジュールを使うことができます。サブフォームを分割して、 "旧式の"方法でも新しいgitサブツリーツールでもマージすることができます。

私はちょうどこの特定の場合を行う方法がわかりません。

+0

はなぜドットファイルリポジトリ内のサブツリーとして、各サブモジュールを保持していませんか? – dan

+0

はい、それは私がしたいことです。サブモジュールを取り除き、リポジトリ全体を1つだけ維持したい – kissgyorgy

答えて

2

Alexander Mikhailianはサブツリー内のすべてのサブモジュールを変換するためにscriptを作成しました。これをケースに合わせることができます。

はここのステップを提示:

cat .gitmodules |while read i 
do 
    if [[ $i == \[submodule* ]]; then 
    mpath=$(echo $i | cut -d\" -f2) 
    read i; read i; 
    murl=$(echo $i|cut -d\ -f3) 
    mcommit=`eval "git submodule status ${mpath} |cut -d\ -f2"` 
    mname=$(basename $mpath) 
    echo -e "$name\t$mpath\t$murl\t$mcommit" 
    git submodule deinit $mpath 
    git rm -r --cached $mpath 
    rm -rf $mpath 
    git remote add $mname $murl 
    git fetch $mname 
    git branch _$mname $mcommit 
    git read-tree --prefix=$mpath/ -u _$mname 
fi 
done 
git rm .gitmodules 

私はあなたのための最も簡単なルートはpreztoレポにスクリプトを適用し、その後dotfilesリポジトリにレポサブツリーにすることだと思います。

  1. dotfilespreztoレポを指す新しいリモートURLを追加します:あなたはサブツリーを作成するには、次のstepsを使用しますpreztoリポジトリでスクリプトを実行した後

    git remote add -f prezto [email protected]:path/prezto.git 
    
  2. ローカルdotfilesプロジェクトにpreztoプロジェクトをマージします。これはあなたのファイルをローカルに変更するものではありませんが、次のステップのためにGitを準備します。

    git merge -s ours --no-commit prezto/master 
    
  3. 新しいprezto-subdirというディレクトリ(またはものは何でもあなたが好き)を作成し、それにpreztoプロジェクトのGitの歴史をコピーします。

    git read-tree --prefix=prezto-subdir/ -u prezto/master 
    
  4. 変更を保存して安全に保つようにします。

    git commit -m "Subtree merged in prezto" 
    
関連する問題