8

gitリポジトリをバックアップするためにgitバンドルを使用しています。最近のバージョンのgitでは、サブモジュールのリポジトリメタデータは、サブモジュール内の.gitディレクトリに保存されていた以前とは対照的に、親リポジトリの.git/modulesに保存されます。

git-bundleをサブモジュールで実行すると、サブモジュールを省略して、親リポジトリのバンドルが作成されます。

これに光を当てることができる人はいますか?
サブモジュールのgitバンドルを作成するにはどうすればよいですか?

参照: gitメーリングリストの質問

編集

sschuberthでそれが機能することを読んだ後、テストするスクリプトを作成し、それが機能することを確認できます。リポジトリの最上位ディレクトリにあるかどうかを知るために.gitディレクトリの存在を確認することに依存したバックアップスクリプトがあり、サブモジュールが.gitファイルの使用を開始したときに壊れました。リポジトリの最上位フォルダにいることを保証するための推奨される方法を誰かが知っているなら、私は興味があります。どうしてこれを逃したのかわかりません。

サブモジュールのテストスクリプトを作成する必要がある人が興味を持った場合に備えて、これは私が使用したスクリプトです。

#!/bin/bash

git --version

mkdir super
mkdir subRemote

touch super/superFile.txt
touch subRemote/subFile.txt

cd super

   git init
   git add --all
   git commit -am"Initial commit"

cd ..


cd subRemote

   git init
   git add --all
   git commit -am"Initial commit"

cd ..


cd super

   git submodule add ../subRemote/.git
   git add --all
   git commit -am"added submodule"
   git submodule update
   echo -e "\ngit log in super:"
   git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative --all


   cd subRemote

      echo -e "\ngit bundle:"
      git bundle create ../../submoduleBundle --all --remotes

   cd ..

cd ..


git clone --mirror submoduleBundle bundledSub/.git

cd bundledSub

   git config core.bare false
   git config core.logallrefupdates true
   git remote rm origin
   git checkout

cd ..


#------------------------------------------------

cd super

   echo -e "\nfiles in super":
   ls -alh

cd ..


cd super/subRemote

   echo -e "\nfiles in super/subRemote":
   ls -alh

cd ../..


cd bundledSub

   echo -e "\nfiles in bundledSub":
   ls -alh

cd ..
4

2 に答える 2

2

git submodule update実行が成功し、サブモジュール内の.git ファイル(ディレクトリではない) が存在することは確かですか? 私のテストでは、サブモジュールのバンドルはバージョン 1.7.9.6 で正常に動作します。

それでも何らかの理由で失敗する場合は、回避策として、サブモジュールのリポジトリを独自の作業ツリーに複製し、git bundleそこから実行します (スーパープロジェクトで示されているコミットのためにgit submodule status)。

于 2012-08-06T14:17:02.117 に答える
1

これを行う必要はありませんが、通常と同じ方法で行うと思われます-サブディレクトリをバンドルし(送信する必要のある変更がある場合)、親リポジトリをバンドルします。

サブモジュールは単なる別の git リポジトリです。

于 2012-07-12T16:20:03.367 に答える