5

git-svn を使用して、Subversion でホストされているプロジェクトに対して開発するために git を使用しています。

git svn clone svn://project/

私の一般的なワークフローは、マスター ブランチで編集とコミットを繰り返し、次に次の方法で svn リポジトリにコミットすることでした。

git stash
git svn dcommit
git stash apply

「stash」コマンドが保持している、svn リポジトリにコミットしたくないローカル変更の 1 つは、変更されたデータベース接続文字列です。追加の「隠し」手順を実行せずに、このローカルの変更を保持する最も便利な方法は何ですか?

「スタッシュ」や「キルト」のようなものが私が探しているものだと思いますが、私はまだ git に十分慣れていないので、正確な呪文につながるいくつかの用語が欠けていると思います。

更新git stash: + git-svn action+シリーズを回避しているように見える唯一の解決策はgit stash apply、git-svn ref を手動で更新することでした。

(check in local-only change to 'master', then...)
$ cat .git/refs/master > .git/refs/remote/git-svn
$ git svn fetch (with at least one new SVN revision)

そして、ローカルのみのコミットは、2 つの svn リビジョン間の奇妙な (おそらく安全ではない) コミットとして残されます。

4

4 に答える 4

2

考えられるアプローチの 1 つは、ローカルのみの変更を含む「ローカル」ブランチを作成し、そこから「作業」ブランチをブランチすることです。このセットアップでは、次のことができます。

git checkout work
git checkout -b work_tmp
git rebase --onto master local work_tmp
git checkout master
git merge work_tmp
git branch -D work_tmp
git svn dcommit master

(そして当然、そのためのシェルスクリプトを作成します)

プロジェクトでこれを使い始めたばかりですが、この方法には欠点があるかもしれません。

于 2010-03-19T12:50:06.653 に答える
1

本当の解決策は、リポジトリに属さないものをコミットしないことであることに同意する必要があります。あなたが説得しようとしている人のところに行って、ローカル システムに追加するファイルでデフォルト プロパティをオーバーライドできるメカニズムを追加したいと伝えます。

たとえば、プロパティの名前が変更されたときに発生する可能性のあるマージの競合を解決する明確な方法はありません。したがって、実装が不十分なソリューションのハックを見ていると思います。そのため、質問に対する直接的な回答はハックされていないように見えます。

于 2010-05-11T06:44:53.100 に答える
0

git svn と一緒に stg (quilt ですが、git と統合されています) を使用します。

アップストリームに送信したくない方法でビルドシステムにパッチを当てるstgにパッチがあります-それはあなたのDBパッチのようです。

パッチを適用するには:

stg pop -a stg push 適用したいパッチ名 git svn dcommit

または最新の SVN に対してリベースするには:

git svn fetch stg rebase トランク (または svn ブランチの名前)

于 2010-03-02T22:37:19.657 に答える
0

あなたの質問に対する正確な答えではありませんが、それでも役に立ちます:

django サークルでは、データベース接続などをリポジトリにない localsettings.py というローカル ファイルに含めるのが標準的な方法です。

このファイルは、展開する各環境に固有です。たとえば、localsettings.py.example のように、リポジトリにサンプル ファイルを含めると役立ちます。

それ以外の場合は、すべてのリポジトリの構成ファイルを含め、インフラストラクチャを実装して、ホスト名に基づいて適切なものをクエリします。

于 2010-03-02T15:26:25.780 に答える