9
votes

Comment puis-je éviter un DCOMMIT accidentel d'une branche locale

Parfois, je crée des succursales locales dans Git, et j'aimerais obtenir un message d'avertissement lorsque j'essaie de les dcommouer.

Comment puis-je m'empêcher de dommage accidentellement dans une branche locale?


3 commentaires

Non intégré mais une idée: dès que vous branche, faites un git config - section-section "svn-temmote.svn" "no-svn-distant" . Une fois que vous voulez faire le DCOMMIT, vous pouvez revenir cela.


Ou peut-être que je pourrais spécifier d'une manière ou d'une autre qu'il n'y a pas de branche en amont pour cette branche locale? Savez-vous comment je peux faire ça?


J'ai étudié cela à la lumière de votre question, mais il semble que GIT SVN ne reçoit pas le commutateur de branche locale, il pense donc qu'il est toujours sur le tronc ou la branche / la balise de départ. Cela pourrait valoir la peine de changer la ligne de branche par défaut dans le fichier de configuration pour le tester.


3 Réponses :


2
votes

La première chose qui vient à l'esprit consiste à utiliser un crochet de pré-validation GIT pour résoudre le problème. Ce serait facile pour les repos pure git:


1 commentaires

Le deuxième lien semble prometteur. +1



8
votes

Une alternative aux crochets de pré-validation, si vous utilisez Linux (ou Git Bash ou Cygwin ou similaire), est d'envelopper git dans une fonction d'aide à coquille. Ajoutez le ci-dessous à votre ~ / .bstructrc (pour bash, git bash) ou ~ / .zshrc (pour zsh) Fichier ou quel que soit l'équivalent correspondant à votre shell: xxx

(J'ai testé cela avec Bash et ZSH sur le chapeau rouge et bash sur cygwin)

Chaque fois que vous appelez git , vous 'll appeler maintenant cette fonction plutôt que le binaire normal. La fonction exécutera Git normalement, sauf si vous appelez git svn dcommit lorsqu'il est attaché à une branche qui n'est pas maître. Dans ce cas, cela vous demandera de confirmer avant de faire le commit. Vous pouvez remplacer la fonction en spécifiant le chemin d'accès à git explicitement (c'est ce que le $ real_git fait).

N'oubliez pas qu'après mise à jour ~ / .BASHRC ou équivalent, vous devez le recharger, soit en démarrant une nouvelle session shell (déconnecter et vous connecter à nouveau) ou en exécutant source ~ / .bstrucrc .

EDIT : En tant qu'amanciement, vous pouvez supprimer la première ligne, démarrage real_git = et remplacer les autres instances de $ real_git < / Code> Avec Commande Git , qui atteint la même chose mais de la manière préférée. Je n'ai pas mis à jour le script lui-même car je n'ai pas été en mesure de tester le changement de ZSH.


3 commentaires

Incidemment, si vous souhaitez tester comment cela fonctionne, git svn dcommit --ST-Run déclenchera le même comportement de vérification que git svn dcommit , sans essayer d'effectuer le s'engager.


J'utilise Linux + Zsh, votre solution ne devrait pas être trop difficile pour que je m'adapte, j'essaie que quand je peux.


Je viens de tester ce qui précède dans ZSH; Ça fonctionne bien pour moi. Il suffit de mettre le code dans ~ / .zshrc .



0
votes

Si quelqu'un d'autre a besoin de cela pour Windows PowerShell:

    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"


0 commentaires