9

時々、gitでローカルブランチを作成し、それらからdcommitしようとすると警告メッセージが表示されます。

どうすれば自分が誤って地元の支店から退去するのを防ぐことができますか?

4

3 に答える 3

8

Linux(またはGit bashやCygwinなど)を使用している場合、pre-commitフックの代わりにgit、シェルヘルパー関数をラップすることもできます。~/.bashrc以下を(bash、Git bashの場合)または~/.zshrc(zshの場合)ファイル、またはシェルに相当するものに追加します。

real_git=$(which git)
function git {
    if [[ ($1 == svn) && ($2 == dcommit) ]]
    then
        curr_branch=$($real_git branch | sed -n 's/\* //p')
        if [[ ($curr_branch != master) && ($curr_branch != '(no branch)') ]]
        then
            echo "Committing from $curr_branch; are you sure? [y/N]"
            read resp
            if [[ ($resp != y) && ($resp != Y) ]]
            then
                return 2
            fi
        fi
    fi
    $real_git "$@"
}

(Red Hatではbashとzshを使用し、Cygwinではbashを使用してこれをテストしました)

を呼び出すときはいつでもgit、通常のバイナリではなく、この関数を呼び出すことになります。git svn dcommitマスターではないブランチに接続しているときに呼び出している場合を除き、関数は通常どおりgitを実行します。その場合、コミットを実行する前に確認を求めるプロンプトが表示されます。gitパスを明示的に指定することで関数をオーバーライドできます(これが実行され$real_gitていることです)。

更新~/.bashrcまたは同等の処理を行った後、新しいシェルセッションを開始する(ログアウトして再度ログインする)か、を実行して、リロードする必要があることに注意してsource ~/.bashrcください。

編集:拡張機能として、最初の行を削除し、を開始して、の他のインスタンスをreal_git=で置き換えることができます。これにより、同じことが実現されますが、推奨される方法で実行されます。zshで変更をテストできなかったため、スクリプト自体を更新していません。$real_gitcommand git

于 2012-02-17T14:52:34.430 に答える
2

最初に頭に浮かぶのは、問題を解決するためにgitpre-commitフックを使用することです。これは、純粋なgitリポジトリでは簡単です。

しかし、Hooks for git-svnで説明されているように、これは完全には機能していません。VonCは、gitとSVNの間の一種のプロキシのように機能する中間の裸のリポジトリを利用する(受け入れられた)答えを思いつきました。

多分これもあなたを助けるかもしれません。

于 2012-02-13T14:43:32.777 に答える
0

他の誰かがWindowsPowershellでこれを必要とする場合:

    function CallGit
    { 
        if (($args[0] -eq "svn") -And ($args[1] -eq "dcommit")) {
            $curr_branch = &{git branch};
            $curr_branch = [regex]::Match($curr_branch, '\* (\w*)').captures.groups[1].value
            if ($curr_branch -ne "master") {
                Write-Warning "Committing from branch $curr_branch";
                $choice = ""
                while ($choice -notmatch "[y|n]"){
                    $choice = read-host "Do you want to continue? (Y/N)"
                }
                if ($choice -ne "y"){
                    return
                }
            }
        }
        &"git.exe" @args
    }
    Set-Alias -Name git -Value CallGit -Description "Avoid an accidental git svn dcommit on a local branch"
于 2016-09-01T11:05:51.593 に答える