短い回答:いいえ、それは合理的に可能ではありません。
あなたはここで多くの問題を抱えています。あなたが与えた履歴に実際の履歴が含まれていない場合、定義上、バージョンに含まれるものの記録はありません。何があっても、 "非公開"のコミットが含まれていないブランチには、決してプッシュできません。あなたは基本的にはこのようになります歴史を持つように求めている:
- W - X - ABCD - Y - Z - EFGH - ... (public)
\ \
A - B - C - D - x - E - F - G - H (private)
ABCDは、B、C、およびDをコミットの変更を含むコミットされ、同様にEFGHがE、F、G離れて隠し
、これはgit checkout public-branch; git merge --squash private-branch
を使用して行うことができます。スカッシュマージはマージを実行し、それを通常のコミット、すなわちマージされたブランチを親として記録することなく記録する。このオプションは、マージに非常に注意している限り、あなたのために働くかもしれません。しかし、それはまだ痛みです。 (YとZをマージすると、プライベートレポでABCDとABCDが重複してコミットされることに注意してください。これは醜いですが、これとは違って、完全に異なる歴史です)。
あなたの歴史は発散します。おそらく最良のケースは、タグを使って物事を追跡するのに役立つでしょう。たとえば、コミットD
をprivate-0001
とタグ付けし、ABCD
をpublic-0001
とコミットし、H
をprivate-0002
とコミットし、EFGH
をpublic-0002
とコミットすることができます。それは、少なくとも、別々の歴史がどのように結びついているかの記録を残すことになります。 実際にプライベートなコミットをパブリック・ブランチにマージすることはできません。コミットはその先祖を持ってくるからです。
他の方法を見つけることをおすすめします。これらの寄付を非公開にしたい理由に応じて、いくつかの選択肢があります。
あなたの計画を放棄し、私的貢献者を公開します。
私的貢献者にあなたの名前や偽名を使ってもらいましょう。 (彼らにuser.name
とuser.email
をこのリポジトリの.gitconfigファイルに設定させてください)。匿名のままにしておくだけであれば、これで十分です。
半分にしてください。最初の図を振り返ってみると、スカッシュ・マージを行った後、すべてのプライベート・コントリビュータがその時点にリセットされるようにします(他のブランチを再配置する)。公に公開するたびに、あなたは本質的に私的コミットを捨て、スカッシュ・マージコミットを新しい真実とみなします。これは、あなたが必要としていることを他の貢献者が確実に行うように、あなたの注意を払う必要があります。しかし、それはあなたの狂気の歴史の荷物を惜しまないでしょう。 (誰かがリセットに失敗した場合、それは修正可能である、彼らはD
をコミットする代わりにABCD
をコミットの上にE
をコミット作ったと彼らはそれが属している彼らの枝を移植するgit rebase --onto commit-ABCD commit-D
を使用することができます。。。)あなたの歴史はこのように終わるでしょう:
- W - X - ABCD ------------------ Y - Z - EFGH - ...
\ \
A - B - C - D (abandoned) E - F - G - H (abandoned)
これは、多くの歴史にひどくぎこちないマージがないこと、そして余分なマージやコミットの重複の形で手荷物の周りをドラッグすることがないことです。プライベート寄付を頻繁に公開することはあまりありませんが、痛いことさえありません。あなたも、たとえば、あなたが注意している場合、物事は少し非同期取得してみましょうことができます:
- W - X - AB - X - CD - Z - ...
|\
| A - B (abandoned)
\
C - D (abandoned)
ちょうどあなたがスカッシュ、マージされてきたものを追跡することは非常に、非常に注意してください。先ほど説明したようにタグ付けする以外に、あなたのスカッシュ・マージ・コミットに短いSHA1のリストを組み込み、マージされたコミットからサブジェクトをコミットすることもできます。
出典
2012-01-06 16:24:20
mrj
リポジトリが表示されるように寄稿者として追加する必要はありませんか? – fge
状況は彼らが私の組織に私を加えたことです(そしてまた私を管理者にしました)。私は必ずそれらを私の* repo-a *に持っていきたくはありません。代わりに、私は何とか* repo-a *の最新コードを組織に「プッシュ」する必要があります。 – moey