8

サブモジュールに似たものが必要ですが、依存関係としてメインリポジトリの外部に存在します。

ここに問題があります:

Gitを(本当に厄介な方法で)CADツール(Cadsoft Eagle)の設計ファイルを管理しようとしていますが、gitサブモジュールを使用して各プロジェクトを管理する方法があるかどうかを判断するのに苦労しています。 CADツールの共有ライブラリへの依存。

私は次のようなフォルダ構造を使用しています:

~/eagle/ <-- Main library used by multiple projects
    .git/     
    <library files>

~/projects/ <-- Projects folder
    Proj0/
        .git/
        <design files>
    Proj1/
        .git/
         <design files>

この場合、各プロジェクトのgitサブモジュールとしてeagle.gitリポジトリを追加することは意味がありません。

ただし、「eagle.git」リポジトリの現在の状態をスナップショットして、ライブラリが将来更新された場合にロールバックして、次の場合に使用されていたライブラリファイルの特定のリビジョンにアクセスできるようにする方法が必要です。 Proj[x]がコミットされました。

理想的には、次のようなものが欲しいです。

~/eagle/ <-- Main library used by multiple projects
    .git/     
    <library files>

~/projects/ <-- Projects folder
    Proj0/
        .git/
        <design files>
        **eagle** <-- something that acts like a submodule  
                      but which actually points to ~/eagle/
    Proj1/
        .git/
         <design files>
         **eagle** <-- something that acts like a submodule  
                       but which actually points to ~/eagle/

次のことができるようになりたい:

cd ~/projects/Proj0
git submodule update

〜/eagle/ディレクトリをProj0にチェックインされたリビジョンに自動的にロールバックさせます。

この種の動作を可能にする可能性のあるGitの何かを知っている人はいますか?

4

2 に答える 2

5

プロジェクトごとに、.git/hooks/pre-commit を追加します (実行可能であることを確認します)。

#!/bin/sh
git --git-dir=~/eagle/.git log -1 --pretty=format:%H >.eagle_rev
git add .eagle_rev

次に、各プロジェクトについて:

git config alias.update-eagle '!git --git-dir=~/eagle/.git --work-tree=~/eagle checkout -q $(<.eagle_rev)'

コミットすると、~/eagle の現在の HEAD が記録git update-eagleされ、~/eagle でそのコミットがチェックアウトされます。(git checkout <branch>変更を加える前に ~/eagle に入っていることを確認してください。)

于 2010-07-28T06:44:11.100 に答える
0

内にeagleその場所がなくそれぞれが の特定のリビジョンを使用できる場合、次のように なります。ProjX
ProjXeagle

ごとProjXに、次のことを行う必要があります。

  • MainProjXGit repoがあり、そこには次のものがあります。
    • aProjX
    • eagle(と同じレベルのProjX)のバージョン

MainProjX親プロジェクトの目標は、ProjXとのバージョンをまとめることeagle、つまり正しい依存関係を記録することです。

~/projects/ <-- Projects folder
    MainProj0
      Proj0/
          .git/
          <design files>
      eagle/
          .git/
          <library files>

    MainProj1
      Proj1/
          .git/
          <design files>
      eagle/
          .git/
          <library files>

さて、はい、それは多くの ' ' 重複ですが、それぞれが独自のリビジョンを使用できるeagle場合は必要です。ProjXeagle

于 2010-07-27T19:55:18.870 に答える