つまり、私は git を初めて使用します。または、少なくともコンソールで git を使用しており、Tortoise git を使用しています。そして、私は比較的「一般的な」ユースケースと考える何かに自分自身を見つけます:
いくつかのリポジトリを計画しています: 汎用/共有コード repo_sN、アプリケーション コード repo_appN。
一部の共有リポジトリのフォルダー構造は、次のようになります。
repo_s0
+---folder_s0_0
| file.txt
|
\---folder_s0_1
file.txt
アプリケーション リポジトリのフォルダ構造は、複数の共有リポジトリを使用する場合があります。
repo_app0
+---folder_s0_0
| file.txt
|
+---folder_s0_1
| file.txt
|
+---folder_s1_0
| file.txt
|
\---folder_s1_1
file.txt
ここで、上記の repo_app0 フォルダー構造を remote_repo_app0 にコミットします。つまり、すべての共有サブディレクトリとコンテンツを含めます。また、folder_sN_N のいずれかで行った変更を、適切なリポジトリ repo_sN/pull リポジトリからの更新にプッシュできるようにしたいと考えています。
ただし、2 つの問題が発生しました。git-subtree を使用すると、次のようにしか機能しません。
git subtree add --prefix=s0 remote_repo_s0 master
これは私に与えます
repo_app0
+---s0
| +---folder_s0_0
| | file.txt
| |
| \---folder_s0_1
| file.txt
|
\---s1
+---folder_s1_0
| file.txt
|
\---folder_s1_1
file.txt
サブリポジトリがもう使用されているという事実を隠しておらず、ソースディレクトリが不必要に乱雑になり、職場のデフォルトのフォルダー構造に違反しているため、これは望ましくありません。
を使用してコミットを repo_app0 にプッシュバックしました
git commit -m "My commit"
git push remote_repo_app0 master
git subtree push --prefix=s1 remote_repo_s1 master
ただし、これにより、フォルダ sN で行われた変更もプッシュされ、すべての folder_sN_N の共通のトップ ディレクトリも除外されます :-/.
次に、たとえば、古いコンパイラを使用して app0 をコンパイルするために、repo_s0 のブランチを「マスター」から「互換性」に切り替える必要がある場合があります。したがって、機能は変更されませんが、実装は古い言語構文に準拠するという考え方です。
「通常の」git作業ディレクトリのようなサブツリーを使用してブランチを切り替える方法を見つけることができませんでした。
それで、これはまったく可能ですか?これは本当に難解なユースケースであり、すべての人がシンボリックリンク/手動でコピーするだけですか?必要な部品?さらに、私がここで見逃している解決策はありますか?