私はしばしば、このような質問に戸惑っています。プロジェクトをバージョン管理する必要がある理由は2つあります。
私のプロジェクトには基本的に2種類のファイルがあります。
src/*
、README.md
、configure.ac
、 etc.私はそれらをバージョン管理する必要があります people 。customCheckNBuildScripts/*
、favoriteIDEConfiguration/*
、absolutePaths/*
、shortcuts/*
、hooksILike/*
など、raw-source-coreでの作業に役立つファイル. me 用にバージョン管理する必要があります。このような競合に対処するにはどのワークフローが役立ちますか?
.gitignore
は、ソースファイルとビルドファイルの間をフィルタリングする素晴らしい方法を提供します。しかし、私はそれの2つのバージョンがあることを望みます。私の理想的な世界では、次のものが含まれます。
# RAW-SOURCE-CORE versionning part
# Dedicated to remote github [email protected]:user/myPublicRepo.git
*
!src/
!README.md
!configure.ac
# PERSONAL-USE-OF-THIS-SOURCE versionning part
# Dedicated to remote personal /media/user/flashdrive/myPrivateRepo
*
!src/
!README.md
!configure.ac
!customCheckNBuildScripts/
!favoriteIDEConfiguration/
!absolutePaths/
!shortcuts/
!hooksILike/
github
にプッシュすると、最初の部分のみが使用され、そこに到達します。
github
からプルすると、ファイルの最初のカテゴリと.gitignore
の最初の部分のみが取得されます。
personal
にプッシュすると、2番目の部分が使用されます。
personal
からプルすると、すべてのファイルが取得されます。
この種のハイブリッドバージョン管理は存在しますか?
プライベートツール/フック/スクリプト、およびパブリックソースのサブモジュールを含む「ルート」リポジトリを検討できます。サブモジュールは親プロジェクトについて何も知らず、「クリーン」な履歴を持っています。
私は実際にはサブモジュールのファンではないことに言及する必要があります。それらはIMOで動作するように非常に複雑ですが、この場合、あなたが探している分離を提供します。
.gitignore
は、コミット時に選択的になるのに役立ちます。異なるリポジトリに異なるファイルをプッシュしたい場合は、異なるコミットが必要になるため、おそらくブランチを分離する必要があります。
ソースのみをmaster
ブランチに保持し、そこから別のブランチmaster.personal
をフォークして、サポートファイルを追加することができます。 master
の.gitignore
は、サポートファイルを除外しますが、master.personal
は除外しません。
ソースをmaster
にコミットし、master
をmaster.personal
にマージして、そこにサポートファイルをコミットしてから、各ブランチをリポジトリにプッシュします。
ブランチを切り替える前に、(バージョン管理されていない)サポートファイルをstash save
する必要があるため、コマンドシーケンスのエイリアスを追加することをお勧めします。
GitHubまたはGitHub Enterpriseを使用している場合は、公開コードを1つのプロジェクト/リポジトリに保持し、そのリポジトリを個人用のコピーにフォークすることができます。個人用のコピーに、個人用にバージョン管理されたものをすべて追加しますが、コミットは公開または個人用にしてください。これにより、gitで個人的なものの履歴を追跡できます。公開のものを共有したい場合は、個人リポジトリから公開リポジトリへの公開コミットのプルリクエストを作成できます。したがって、プルリクエスト境界は個人ファイルのフィルターです。おそらくGitHubなしで(gitだけを使用して)これを実現できますが、git remote
、git fetch
、git apply
、およびgit Push
の複雑なシーケンスが多数含まれる可能性があります。最後に、プルリクエストでフォークされたリポジトリに対してGitHubが行うことを複製するスクリプトを記述します。親/パブリックリポジトリを最新の状態に保つことも、git pull
ほど自動ではありません。