何らかの理由で、使用するリポジトリは1つだけです。
しかし、私にはプロジェクトやアプリプロジェクトを含む複数のプロジェクトがあります。java
PHP scripts
Android
私の問題は、リポジトリ内のさまざまなサブフォルダー
にそれらを配置する必要
があることです。さまざまなIDEを使用しています。各IDEはそれ自体のワークスペースを持つことができます。
問題を解決するための簡単な方法(たとえば、意見ではなく設計による)はありますか?
何らかの理由で、使用するリポジトリは1つだけです。
しかし、私にはプロジェクトやアプリプロジェクトを含む複数のプロジェクトがあります。java
PHP scripts
Android
私の問題は、リポジトリ内のさまざまなサブフォルダー
にそれらを配置する必要
があることです。さまざまなIDEを使用しています。各IDEはそれ自体のワークスペースを持つことができます。
問題を解決するための簡単な方法(たとえば、意見ではなく設計による)はありますか?
ほとんどの人は複数のリポジトリを使用するように言うでしょうが、他の解決策があることを言及する価値があると思います。
単一のリポジトリには、孤立したブランチと呼ばれる複数の独立したブランチを含めることができます。孤立したブランチは互いに完全に分離されています。彼らは歴史を共有していません。
git checkout --orphan BRANCHNAME
これにより、現在のブランチとは関係のない新しいブランチが作成されます。各プロジェクトは、独自の孤立したブランチに存在する必要があります。
なんらかの理由で、孤立したチェックアウト後にgitを少しクリーンアップする必要があります。
rm .git/index
rm -r *
削除する前にすべてがコミットされていることを確認してください
孤立したブランチがクリーンになると、通常どおりに使用できます。
孤立したブランチの煩わしさをすべて避けてください。2つの独立したリポジトリを作成し、それらを同じリモートにプッシュします。リポジトリごとに異なるブランチ名を使用するだけです。
# repo 1
git push origin master:master-1
# repo 2
git push origin master:master-2
これは、複数のプロジェクトに単一のディレクトリを使用するためのものです。この手法は、あるプロジェクトから別のプロジェクトに変更をプルする必要がある、密接に関連するいくつかのプロジェクトに使用します。孤立したブランチの考え方に似ていますが、ブランチを孤立させる必要はありません。同じ空のディレクトリ状態からすべてのプロジェクトを開始するだけです。
このソリューションからの驚異を期待しないでください。私が見ているように、追跡されていないファイルには常に煩わしさがあります。Gitは実際にはそれらをどう処理するかについての手がかりを持っていないため、コンパイラーによって生成され、.gitignoreファイルによって無視される中間ファイルがある場合、迅速にスワッピングしようとすると、それらがハングしたままになる可能性があります。たとえば、ソフトウェアプロジェクトとPH.D論文プロジェクトの間。
しかし、ここに計画があります。空のリポジトリをコミットして、gitプロジェクトを開始する必要があるときに開始し、次にすべてのプロジェクトを同じ空のディレクトリ状態から開始します。そうすれば、2つのロットのファイルがかなり独立していることが確実になります。また、ブランチに適切な名前を付け、「マスター」を怠惰に使用しないでください。プロジェクトは分離する必要があるため、適切な名前を付けてください。
Gitコミット(したがってタグとブランチ)は基本的にディレクトリとそのサブディレクトリの状態を保存し、Gitはこれらが同じプロジェクトの一部であるか異なるプロジェクトの一部であるかを認識しないため、gitが同じリポジトリに異なるプロジェクトを保存することに問題はありません。問題は、別のプロジェクトを使用するときに1つのプロジェクトから追跡されていないファイルをクリアするか、後でプロジェクトを分離することです。
cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY
空からプロジェクトを開始します。
git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog
git add chess.prog
git commit -m "chess program"
いつでも好きなときに。
git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt
git commit -m "Ph.D"
いつでもプロジェクト間を行ったり来たりできます。この例は、チェスソフトウェアプロジェクトに戻ります。
git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog
git commit -m "improved chess program"
ただし、プロジェクト/ブランチ間でスワップするときに、追跡されていないファイルに悩まされることになります。
touch untracked_software_file.prog
git checkout thesis
ls
philosophy_doctorate.txt untracked_software_file.prog
定義上、gitは追跡されていないファイルをどう処理するかを実際には知らないので、それらを処理するのはあなた次第です。次のようにして、追跡されていないファイルが1つのブランチから別のブランチに持ち越されるのを防ぐことができます。
git checkout EMPTY
ls
untracked_software_file.prog
rm -r *
(directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
philosophy_doctorate.txt
新しいプロジェクトをチェックアウトする前にディレクトリが空であることを確認することで、別のプロジェクトからの追跡されていないファイルがぶら下がっていないことを確認しました。
$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty
空のリポジトリをコミットするたびに同じ日付が指定されている場合、独立して作成された空のリポジトリのコミットは同じSHA1コードを持つことができます。これにより、2つのリポジトリを個別に作成し、後で1つのリポジトリに共通のルートを持つ単一のツリーにマージできます。
# Create thesis repository.
# Merge existing chess repository branch into it
mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis
# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess
また、ファイルを作成する代わりに、プロジェクトを可能な限りサブディレクトリに保持する場合にも役立ちます。
chess.prog
philosophy_doctorate.txt
持ってる
chess/chess.prog
thesis/philosophy_doctorate.txt
この場合、追跡されていないソフトウェアファイルはになりますchess/untracked_software_file.prog
。ディレクトリで作業しているときは、thesis
追跡されていないチェスプログラムファイルに邪魔されてはいけません。他のプロジェクトから追跡されていないファイルを削除しなくても、楽しく作業できる場合があります。
また、追跡されていないファイルを他のプロジェクトから削除する場合は、不要なファイルをそれぞれ選択して削除するよりも、不要なディレクトリをダンプする方が速くなります(エラーが発生しにくくなります)。
したがって、ブランチに次のような名前を付けることができます。
project1/master
project1/featureABC
project2/master
project2/featureXYZ