1

メインコードベースである別のユニの3番目の(svn)リポジトリからほとんどのリポジトリを取得しながら、ラップトップ(自宅)からサーバー(大学)にgitリポジトリを複製するにはどうすればよいですか?uniOne <-> uniTwoトラフィックを最大化することにより、ホーム<->uniトラフィックの量を最小化したいと思います。

これは私が今ラップトップに持っているものです:

--o--o--o---o---o---o git-svn trunk  
         `--o--o-o--o git mybranch  

これは私がuniOneに乗りたいものです:

--o--o--o---o---o---o git-svn trunk <-- from uniTwo  
         `--o--o-o--o git mybranch  <-- from Laptop

クローンを作成した後、リポジトリはラップトップからブランチをプルできるはずです。

私は試しました:uniOneで:git-svn clone uniTwo、git remote add Laptopですが、gitfetchはLaptopからすべてを取得したいと考えています。おそらくgitclone--depth x Laptopを使用して、それらを一緒に移植することは機能するかもしれないと思いましたが、それでも変更だけでなく、すべてのソースファイルをLaptop->uniOneに転送する必要があります。ラップトップからすべてのパッチをエクスポートして、新しいsvnチェックアウトの上に適用し、ラップトップのブランチを追跡するようにすることもできます(可能な場合)が、次にユニに到着するまで待つ方が簡単です。通常どおりクローンを作成します。

4

1 に答える 1

0

リポジトリを定義しましょう:

  • git-svn <-これは大学のSubversionリポジトリです
  • uni /master <-これはあなたの大学のGitリポジトリです。これは、Subversionリポジトリから最新の履歴を取得する「フェッチリポジトリ」です。
  • ラップトップ/マスター<-これはラップトップのGitリポジトリです。これはあなたが働く場所です。

次の設定をお勧めします。

git-svnを実行してuni/masterを作成します。実行することにより、 git-svnからの最新の変更でuni / masterを自動的または定期的に更新します(コミットフック、cronジョブ、またはUniにいるたびに手動でトリガーします)。git svn clonegit svn rebase

uni/masterのクローンを作成してラップトップ/マスターを作成します。ここでは、ローカルで何度でもコミットできます。大学にいるときは、実行してuni / masterから最新の変更を取得します SVNはgit-branchesを理解しないため、履歴を線形に保つために常に--rebaseを実行する必要があります)。git pull --rebase

ラップトップからgit-svnに変更をプッシュする場合は、最初にラップトップ/マスターでgit-svnリモートを構成する必要があります。

git svn init https://url.to.uni-svn-repo

これで、を使用して最新の変更をuni-svnにプッシュバックできますgit svn dcommit最初にuni/masterの最新のコミットへの参照を更新する必要がある場合があることに注意してください。最初:

git update-ref refs/remotes/git-svn refs/remotes/uni/master

ラップトップ/マスターからユニ/マスターにプッシュしようとしないでください。リベース/リライト履歴は、Gitがgit-svnと再度同期しようとすると、Gitを混乱させるだけなので、これは混乱をもたらすだけです。

http://www.tfnico.com/presentations/git-and-subversionも参照してください。ここでは、GitとSVNを一緒に使用するためのヒントを集め始めました。

于 2010-09-28T13:31:08.160 に答える