1

次の構造のgithubでホストされているプロジェクトがあります

github.com/example/allpackages

.
├── .git
└── packages
    ├── example-1
    ├── example-2
    └── example-3

github にプッシュするたびに、各パッケージの内容をリポジトリ名に対応するリポジトリにプッシュしたいと思います。

github.com/example/example1

.
├── .git
└── example1

github.com/example/example2

.
├── .git
└── example2

これを自動化する方法についてのアイデアはありますか? このタスクに Travis-CI を使用すると誰かが言及していましたが、それがどのように機能するかについての詳細は見つかりませんでした。

私の理想的な解決策:

  • 完全に自動化されます。つまり、プッシュするコンピューターによって更新がトリガーされるのではなく、github または外部サービスによってトリガーされます。
  • 更新時に「allpackages」から対応するサブリポジトリに履歴を移行します

どこから調査を開始するかについてのガイダンスは大歓迎です。前もって感謝します!

編集:

@VonC は、サブモジュールを使用し、使用してコミットすることを提案しましたgit submodule foreach --recursive

長所:

  • ドライ - 各サブモジュールのコードは 1 か所にあります。
  • 親のサブモジュールへの変更を追跡できます。
  • エイリアスを使用git submodule foreach --recursiveすると、複数のサブモジュールへの単一のコミットが可能になります

短所:

  • サブモジュールに加えられた変更を表示することは、すぐには明確ではありません。サブモジュールを掘り下げて、どのような変更が行われたかを確認する必要があります。
  • 使用git submodule foreach --recursiveは面倒で、通常のコミットほどエレガントではありません。

この特定のユースケースの場合。たとえば、「パッケージ」リポジトリgithub.com/example/example1は、ある意味で読み取り専用になります。私は彼らに直接プッシュしません。が更新されたときにのみ更新を受け取りますallpackages。それらを作成する必要がある唯一の理由は、それらを利用するパッケージマネージャーが各パッケージに個別のリポジトリを必要とするためです。

4

3 に答える 3

3

すべてのexampleXフォルダーを git repos として宣言し、それらを親 repos のサブモジュールallpackagesにすると、次のようになります。

1 つのコマンドで、すべてがプッシュされます。

于 2013-10-06T08:16:35.270 に答える
1

以前に推奨したクリーンな「サブモジュール」アプローチを今でも好みます。

しかし、リポジトリの 1 つのフォルダーを独立したアップストリーム リポジトリにプッシュするもう 1 つのハックな方法は、ネストされたリポジトリ手法を使用することです。

cd myrepos
git clone https://github.com/example/example1
git clone https://github.com/example/allpackages
cd allpackages/packages/example-1
git --git-dir=../../../example1/.git add .
git --git-dir=../../../example1/.git commit -m "commit for example1"
git --git-dir=../../../example1/.git push

example1 GitHub リポジトリの場合、allpackages/packages/example-1:のワーキング ツリーにより--git-dir 、Git はそれallpackages/packages/example-1が独自の (ネストされた) git リポジトリであり、リモート ' origin' が GitHub を参照していると考えます。

ただし、これらのコマンドをスクリプトでラップし、git エイリアスを介してそのスクリプトを呼び出さない限り、3 つの異なるプッシュ コマンドを意味します。

git config alias.pushall '!sh pushall.sh'
于 2013-10-07T20:53:07.503 に答える