何らかの理由で、使用するリポジトリは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つのファイルがかなり独立していることが確実になります。また、ブランチに適切な名前を付け、「master」だけを怠惰に使用しないでください。プロジェクトは個別にする必要があるため、適切な名前を付けます。
Gitコミット(およびタグとブランチ)は基本的にディレクトリとそのサブディレクトリの状態を保存し、Gitはこれらが同じプロジェクトの一部であるか別のプロジェクトの一部であるかを知りません。そのため、gitが同じリポジトリに異なるプロジェクトを保存しても問題はありません。問題は、あるプロジェクトから追跡されていないファイルを別のプロジェクトを使用するときに消去するか、後でプロジェクトを分離することです。
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
git submodule add [url to git repo]
- git-scm.com/book/en/v2/Git-Tools-Submodules