web-dev-qa-db-ja.com

Gitの哲学:公開ファイルと個人ファイル:ハイブリッドバージョン管理はありますか?

私はしばしば、このような質問に戸惑っています。プロジェクトをバージョン管理する必要がある理由は2つあります。

  • people がソースコードにアクセスして探索し、利用できるように、ソースコード全体を公開します。
  • [〜#〜] i [〜#〜] が元に戻したり、フォークしたりできるように、プロジェクト全体を履歴とともにアーカイブします。

私のプロジェクトには基本的に2種類のファイルがあります。

  • 重要なファイル、raw-source-core、src/*README.mdconfigure.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からプルすると、すべてのファイルが取得されます。

この種のハイブリッドバージョン管理は存在しますか?

7
iago-lito

プライベートツール/フック/スクリプト、およびパブリックソースのサブモジュールを含む「ルート」リポジトリを検討できます。サブモジュールは親プロジェクトについて何も知らず、「クリーン」な履歴を持っています。

私は実際にはサブモジュールのファンではないことに言及する必要があります。それらはIMOで動作するように非常に複雑ですが、この場合、あなたが探している分離を提供します。

4
axl

.gitignoreは、コミット時に選択的になるのに役立ちます。異なるリポジトリに異なるファイルをプッシュしたい場合は、異なるコミットが必要になるため、おそらくブランチを分離する必要があります。

ソースのみをmasterブランチに保持し、そこから別のブランチmaster.personalをフォークして、サポートファイルを追加することができます。 master.gitignoreは、サポートファイルを除外しますが、master.personalは除外しません。

ソースをmasterにコミットし、mastermaster.personalにマージして、そこにサポートファイルをコミットしてから、各ブランチをリポジトリにプッシュします。

ブランチを切り替える前に、(バージョン管理されていない)サポートファイルをstash saveする必要があるため、コマンドシーケンスのエイリアスを追加することをお勧めします。

0
Philippe

GitHubまたはGitHub Enterpriseを使用している場合は、公開コードを1つのプロジェクト/リポジトリに保持し、そのリポジトリを個人用のコピーにフォークすることができます。個人用のコピーに、個人用にバージョン管理されたものをすべて追加しますが、コミットは公開または個人用にしてください。これにより、gitで個人的なものの履歴を追跡できます。公開のものを共有したい場合は、個人リポジトリから公開リポジトリへの公開コミットのプルリクエストを作成できます。したがって、プルリクエスト境界は個人ファイルのフィルターです。おそらくGitHubなしで(gitだけを使用して)これを実現できますが、git remotegit fetchgit apply、およびgit Pushの複雑なシーケンスが多数含まれる可能性があります。最後に、プルリクエストでフォークされたリポジトリに対してGitHubが行うことを複製するスクリプトを記述します。親/パブリックリポジトリを最新の状態に保つことも、git pullほど自動ではありません。

0
Greg