git-svnからのリモートブランチは、通常のGitリモートとほとんど同じです。したがって、ローカルリポジトリでgit-svnクローンを作成し、変更をGitHubにプッシュできます。Gitは関係ありません。git-svnクローンを作成し、まったく同じ変更をGitHubにプッシュすると、Google Codeリポジトリの非公式ミラーが作成されます。残りはバニラGitです。
git svn clone http://example.googlecode.com/svn -s
git remote add origin git@github.com:example/example.git
git push origin master
これで、SubversionリポジトリをGitと同期する必要がある場合があります。次のようになります。
git svn rebase
git push
gitkなどでは、これは次のようになります。
o [master][remotes/trunk][remotes/origin/master]
|
o
|
o
そしてを実行するとgit svn rebase
、次のようになります。
o [master][remotes/trunk]
|
o
|
o [remotes/origin/master]
|
o
|
o
したがって、実行git push
すると、これらのコミットが[remotes / origin / master]である GitHubにプッシュされます。ブランチに。そして、最初のASCIIアート図のシナリオに戻ります。
問題は、変更をどのようにミックスに組み込むかということです。つまり、git-svn-rebase-ingやgit-pushingと同じブランチにコミットすることはありません。変更には別のブランチが必要です。そうしないと、Subversionの変更の上に変更をリベースすることになり、Gitリポジトリのクローンを作成する人を混乱させる可能性があります。フォローしてください?では、ブランチを作成します。これを「機能」と呼びましょう。そして、コミットを行い、GitHubの機能ブランチにプッシュします。あなたのgitkは次のようになります:
o [features][remotes/origin/features]
|
o
|
o [master][remotes/trunk][remotes/origin/master]
|
o
ここでは、Google Codeブランチの前に、機能ブランチにいくつかのコミットがありますよね?では、Google Codeの新しいものを組み込む場合はどうなるでしょうか。あなたはgit svn rebase
最初に走ってこれを得るでしょう:
o [features][remotes/origin/features]
[master][remotes/trunk] o |
| o
o /
|/
o[remotes/origin/master]
|
o
あなたがいる場合git push
アウトマスター、あなたが想像できる[リモコン/起源/マスター]をマスターと同じポイントであること。しかし、機能ブランチには変更がありません。ここでの選択は、マスターを機能にマージするか、機能をリベースすることです。マージは次のようになります
git checkout features
git merge master
o [features]
/|
/ o [remotes/origin/features]
[master] o |
| o
o /
|/
o
|
o
次に、機能をGitHubにプッシュします。マスターがスペースを節約するためにリモコンを省略しました。それらは[マスター]と同じ時点になります。
リベースのアプローチは少し邪魔です。プッシュは早送りマージではないため、-forceでプッシュする必要があります(クローンを作成した人の下から機能ブランチをプルします)。これを行うことは実際には大丈夫とは見なされていませんが、あなたが決心している場合、誰もあなたを止めることはできません。パッチが上流でわずかに作り直された形で受け入れられる場合など、いくつかのことも簡単になります。衝突をいじる必要がなくなるので、リベース-アップストリームパッチをスキップできます。とにかく、リベースは次のようになります:
git rebase master features
o [features]
|
o
| o [remotes/origin/features]
[master] o |
| o
o /
|/
o
|
o
そして、あなたはそれをしなければならないでしょうgit push --force
。なぜそれを強制する必要があるのかがわかります。歴史には、[リモート/オリジン/機能]から現在のリベース後の[機能]まで、古い古い分裂があります。。
これはすべて機能しますが、多くの努力が必要です。通常の寄稿者になる場合は、しばらくの間このように作業し、いくつかのパッチをアップストリームに送信して、Subversionへのコミットアクセスを取得できるかどうかを確認するのが最善の策です。失敗した場合は、変更をGitHubにプッシュしないでください。それらをローカルに保ち、とにかく上流で受け入れられるようにしてください。
git
noob here)簡単な質問。大規模なSVNリポジトリに対してこれを行ったところ、最大で141メガバイトになりました。私はそれをgithubにプッシュし、それを元に戻し、130メガバイトになりました。私はgit gc
両方で走った。違いを説明できるものは何ですか?