7

[アップデート]

詳しくは、私が自宅で純粋な Git をやろうとしている理由は、私の会社は Git に移行したいのですが、開発者が自社のリポジトリで Git に関する知識を持っていないため、マネージャーが変更を加えたがらないからです。だから、私がやろうとしていることは、この学習段階で誰かが Subversion にマージできるようにしながら、誰もが Pure git を使用できるようにすることです。そのため、緊急の場合でも Subversion を使用できます。

ですから、Git に慣れ親しんでいる皆さんの前に、純粋な Git を使用するためにリポジトリを転送することはできません。そのため、Subversion と Git の両方で更新が行われます。(そして現在のメイン リポジトリは Subversion です)。そこで、dcommit でリポジトリを Subversion に同期している間、Git がスムーズに動作するようにしています。

[質問]

私は Subversion をリポジトリとして使用している組織に所属しているため、個人的な Git としてダンプします (将来、Subversion を Git に置き換えて使用する予定です)。

これで、 GitSubversion (メイン ソース) の両方を使用するリポジトリができました。git と subversion の両方を使用する必要がある場合、 git svn rebaseの処理に問題があります。

私のワークフローは以下のようなものです

オフィスで

  1. リポジトリには Git-svn インターフェイスがあります
  2. 私はいつもここからgit svn dcommitでコードを Subversion にコミットします。
  3. Bitbucket のリモート git リポジトリにプッシュします

家に

  1. Bitbucket からリポジトリをクローンします
  2. Bitbucket の操作とコミット

さて、オフィスに戻ります

  1. gitプル
  2. git svn リベース
  3. git svn dcommit
  4. ギットプッシュ

ステップ 4. すでにブランチをリベースしているという問題があります

今ここに問題がある、私が家に帰ったとき

家に帰ると、ブランチがすでにリベースされているため、「git fetch」を使用できません。そのため、 git branch -D .....でブランチを削除してから、もう一度git checkoutする必要があります。

そこで、Git リポジトリと Subversion の両方を同時に使用し、 git svn rebaseまたはgit svn dcommitで操作を行った後、Git でうまくいく方法を探します。

ノート。自宅でgit-svnを使用することは好みません。Git のみを使用するように進めてください。

4

5 に答える 5

2

問題の主な原因はgit svn dcommit、コミットメッセージを変更してSVNコミットデータを含めることだと思います。メッセージはコミットのSHA1に含まれているため、この変更はまったく異なるコミットとしてgitに表示されます。

そのための私の解決策は、SVNと同期するオフィスリポジトリに1つのブランチを持ち、作業を行うために別の(純粋にgit)ブランチを持つことです。SVNリポジトリと何かを交換したいときはいつでも、1つまたは他の方向。

私の場合、SVN交換専用の別のgitリポジトリを設定しました。15分ごとにそのリポジトリをSVNサーバーと同期するcronジョブがあります。このように私はを逃しませんgit svn rebase

于 2012-04-17T14:44:33.697 に答える
2

さて、ここでのあなたの主な問題は、履歴が書き直されているため、自宅から実際に行うことができないことですgit pull(実際には機能するはずですが、不要なマージを試みます)。

その問題を乗り越える最も簡単な方法は、を使用することgit pull --rebaseです。このように、自宅で行ったコミットをリモートブランチの先端にマージする代わりに、ブランチの作成以降に行われたすべてのコミットをブランチの先端にリベースします。Gitは、一部のコミットがまったく同じであり、リベース中に自動的にプルーニングされることを確認できるほど賢くなります。

于 2012-04-17T13:58:08.593 に答える
0

結局、なぜsvnを保持しているのかについては言及していません。しかし、私のお勧めは、クリーンな git リポジトリから始めることです。そして、不要な問題を回避します。

Git への移行に関して最良の回答をしたのは Casey だと思います: How to migrate SVN repository with history to a new Git repository?

もちろん、バックアップを作成してからプロセスを開始する必要があります。

もう 1 つのアイデアは、リベースが問題である場合は、純粋な svn 更新を使用してから、自分で書いたかのように変更を Git にコミット (git commit のみ) しないのはなぜでしょうか。

于 2012-04-16T21:59:32.233 に答える
0

Gitブックを使用したバージョン管理から解決策を見つけました。295ページ。

ローカル - マスター ブランチを使用する代わりに、リモート ブランチをチェックアウトする必要があります

git checkout remote/master (Detach HEAD)
git merge --no-ff master (merge the local master)
git svn dcommit
git push origin (update to git Repository)

このモデルは、1 人が Subversion リポジトリにマージし、もう 1 人が純粋な Git または純粋な Subversion で作業するためのものです。このようにして、Git ユーザーはマージの問題なく Git を使用できます。

于 2012-04-30T12:25:00.027 に答える
0

実際にはできるはずですがgit fetch、マージする代わりに をgit merge origin/branch使用できますgit rebase origin/branch。それはあなたの問題を解決するはずです

試しても問題が解決しない場合はgit fetchgit checkout -f -B branch origin/branch最後のコマンドでリモート ブランチからローカル ブランチを強制的に上書きします。

于 2012-04-17T14:25:03.503 に答える