それは私にはかなり新しいことです。私たちは、私たちのソースコードにアクセスすることを顧客に認めました。 bitbucket/Sourcetreeを使うと、私はフォークを使って特定の状態へのアクセスをコミットすることができます。実際の(まだ開発中のコード)へのアクセスを許可したくありません。私はマイルストーンだけを共有する予定です。フォークはこのように使用できますか? 特定のコミットだけを共有するための他のオプションはありますか? BR、 ダニエルGitフォークを使用する
答えて
私はあなたがやりたいと思うものをするために、最も簡単な方法は、このようになります:
- チェックアウトは、あなたが共有したいコミット。
- コピープロジェクトディレクトリ別名(
.git
隠しディレクトリを除く)。 - 新しいgitリポジトリ(github、bitbucket、またはどこでも)としてプロジェクトディレクトリをコピーしました。または、それを圧縮してクライアントに直接送信してください。
この方法では、クライアントにコードのスナップショットが表示されます。現在のコミットはなく、履歴もありません。
こんにちは、ありがとう、私はあなたの提案を検討します。私は歴史のないようにこのソリューションの部分 – dba
リポジトリ内でコミットまたはブランチレベルのアクセス制御を提供する方法はないと思います。より限定されたレポを作成するのは合理的なアプローチですが、ニーズに応じて、セルジオ・チューレンセフの提案でスナップショットをコピーするためのいくつかの選択肢を提案する可能性があります。
これは、共有スナップショットを履歴に戻す内部的なデータが失われる可能性があるという欠点があります。将来新しいバージョンを提供する場合や、フォークからコードベースにパッチを戻すことができる場合は、この分離によって追加の作業が作成されます。ソリューションの
パートは、単に(歴史を持つ)あなたコミットとそのコミット(提供スナップショット)の間の関係を追跡されます。そしてその問題の一部は、ある種のタグ付け規約で解決できるだけのものです。しかし、それを超えて、変更を前後に移行したいと考えるなら、いくつかの手動による移行作業を避けるために設定を行うことができます。あなたが最初に共有し、フォークのためのブランチを作成したいコミット識別、
まず、あなたのレポで:
ですから、このような何かを試みることができます。あなたはとタグ付けコミットしている場合はコミットツー・共有することが、その後
git checkout commit-to-be-shared
git checkout -b fork_master
(あなたが考える場合それとも代わりに
fork-master
の顧客の名前が、これはあなたが他の誰かのために再度行う可能性があります何か...です)
次に、手動で新しいリポジトリにコピーする代わりに、オリジナルの「シャロークローン」を作成します。 URLを使用する必要があります(ローカルパスではありません)。普段file://path/to/my/repo
よう/path/to/my/repo
使用の何かとしてレポを扱う場合はそう...
cd ..
git clone --depth=1 -b fork-master http://my.server/origin-repo
これは一つだけのコミットをコピーし、設定します...詳細はお使いのOSに依存するが、うまくいけば、あなたは私が何を意味するか見ますブランチfork-master
のみを取得するように取得します。 しかし、はコミットのIDを保持します。したがって、あなたの起源では、将来的にはより多くの変更をfork-master
にマージし、結果として得られるコミットを簡単に共有することができます。BUTさらに変更を加える場合は、意図しない履歴の暴露を避けるための注意事項について下記を参照してください。
次に、お客様の起源となるサーバー上に(原産地に沿って)空のレポを準備します。
git remote add fork-origin http://my.server/fork-origin-repo
git push -u fork-origin master
(あなたが後で多くを持っているかもしれないと思う場合は、再度リモートのための顧客固有の名前を使用することができます...)
:次に、新規作成した浅いレポで2番目のリモートとしてそれを設定しますあなたが許可したい場合は、あなたの開発者のどれもfork-master
を追加することができます。こうすることで、顧客からパッチをシームレスに受け取ることができます。
今後のヒントを誤って公開しないようにするための秘訣があります。将来、fork-master
にマージしてfork-origin
に渡すと、デフォルトでは新しくマージされたコミットの履歴が表示されます。見た目の単純な修正は、あなたの浅いリポジトリにあります:
git pull --depth=1
ここでの問題は、gitが混乱する可能性があることです。 (簡単に説明すると、新しく取得されたマージは、第2の親には深さ1を持たせたいが、第1の親には深さ1を持たないことを意味する)、解決するのが難しくない:
git pull --depth=2
これで、マージによって新しく統合された作業の履歴が1つ追加されたことがわかります。コミットには、fork-master
にマージする変更が含まれているので、おそらく大丈夫です。コミットメッセージ、タグ、またはあなたが必ずしも共有したくないものがあるかもしれません。その場合、マージの直前に、常にバッファ・コミットを作成することができます。 F1
は元の共有スナップショットです
F1 -------- F2 <--(fork-master)
/ /
/ B
/ /
X ---- X --- A --- X <--(master)
、A
は、あなたが共有することを決めた以上の変更、B
は「お客様の安全」は基本的にA
を複製することをコミットしている、とF2
が新しいマージであるが含まれています。そして、顧客が
F1 ---- F2
/
B
あなたはB
を作成するためにgit commit
を呼び出すとき--allow-empty
オプションを使用する必要があり見るであろう。
注このエンドツーエンドをテストする機会はありませんでした。もし何かの段階でエラーが出たら私に知らせてください。私はそれに応じて更新することができます。
こんにちはマーク、この素晴らしい説明に感謝します。私の場合、顧客側のコミットはありません。サイトでプライベートバックアップとして使用できるソースのみが必要です。どのような方法でも意図される共通の作業はありません。実際に@SergioTulentsevの提案は、私が必要とするものです。履歴のないリポジトリ(特定のコミットを共有することはできません)です。私はちょうど私の側でより簡単なワークフローのためにこれのためにフォークを使いたかった。だから問題は、この方法で使用することができます、私は作業リポに影響を与えずにこのフォークされたレポ履歴をクリーンアップできますか? – dba
hmm ... "@user"は動作していません...? – dba
マイルストーンに到達する際に別々のフォークを共有し、過去の状態(フォーク)を更新しないことを計画しています – dba
- 1. Git:ソリューションの一部のみをフォークして使用する
- 2. gitを1つのフォークから別のフォークにマージする
- 3. git:プルリクエストをフォークにマージするには?
- 4. github.comでプライベートgitリポジトリをフォークする
- 5. アップストリームでフォークを同期する:git fetch + git checkout + git mergeとgit checkout + git pull
- 6. gitのクローンは、フォークのgitブランチ
- 7. gitを使用して共有フォークされたリポジトリを更新する
- 8. Git - ギブスなしのフォーク
- 9. フォーク設定のgitリポジトリ
- 10. 異なる構造のGitフォーク
- 11. Jenkinsでタグを押すGit Publisher - 複数のGitリポジトリ(フォーク)
- 12. git - 組織でホストされているフォークを更新する
- 13. Gitをフォークに元のレポをマージする
- 14. Git:フォーク間を切り替え、プルリクエストバックを作成する
- 15. Git - いくつかのフォークからブランチを作成する
- 16. gitリポジトリをフォークして同期する戦略
- 17. GIT - フォークされた変更/プルリクエストをテストする方法は?
- 18. クローンgitリポジトをフォークされたものに変換する
- 19. 2 git-svnクローン(元+フォーク)のmerge_baseをgitで見つけるには?
- 20. サブモジュールを使用したフォークgithubレポ?
- 21. フォークを使用したC++プログラムのノンブロッキングシステムコール
- 22. Akkaを使用したフォーク&ジョイン
- 23. GIT:私はレポをフォークしてプルしているリポジトリ
- 24. gitでフォークの起源を知るには?
- 25. 他の人のフォークからGitを引き出す
- 26. 既存のgitプロジェクトのnode_moduleをフォークします
- 27. Git(hub)が独自のrepo-pull要求をフォークします
- 28. gitはフォークされたアップストリームタグのローカルブランチを作成します
- 29. git/githubプロジェクトをフォークにリダイレクトしますか?
- 30. highland.jsを使用してストリームをフォークする方法は?
[この回答](https://stackoverflow.com/questions/19641108/split-git-repo-in-a-squashed-public-and-initial-private)は、あなたが何をしているのかもしれない。パブリックブランチを拡張するときに必ずマージとヌルマージバックを行う必要があります。 – jthill