Una alternativa a los enlaces precompuestos, si está utilizando Linux (o Git bash o Cygwin o similar), es ajustar git
en una función de asistente de shell. Añadir el siguiente a su ~/.bashrc
(para Bash, Git Bash) o ~/.zshrc
(por zsh) archivo, o lo que es el equivalente de su shell:
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 "[email protected]"
}
(He probado esto con bash y zsh en Red Hat , y bash en Cygwin)
Siempre que llame al git
, ahora llamará a esta función en lugar de al binario normal. La función se ejecutará git normalmente, a menos que esté llamando al git svn dcommit
mientras está conectado a una sucursal que no es maestra. En ese caso, le pedirá que confirme antes de realizar la confirmación. Puede anular la función especificando la ruta al git
explícitamente (eso es lo que está haciendo el $real_git
).
Recuerde que después de actualizar ~/.bashrc
o su equivalente, tendrá que volver a cargarlo, iniciando una nueva sesión de shell (cierre de sesión e inicie sesión de nuevo) o ejecutando source ~/.bashrc
.
Editar: Como mejora, se puede eliminar la primera línea, comenzando real_git=
, y reemplazar las otras instancias de $real_git
con command git
, que logra lo mismo, pero en la forma preferida. No he actualizado el script en sí, ya que no he podido probar el cambio en zsh.
No incorporado, pero una idea: Tan pronto como rama, hacer una 'sección --rename git config "SVN-remote.svn "" no-svn-remote "'. Una vez que quiera hacer el compromiso, puede revertirlo. – vasquez
O tal vez podría especificar de alguna manera que no hay una rama ascendente para esta rama local? ¿Sabes cómo puedo hacer eso? – greg0ire
Investigué eso a la luz de su pregunta, pero parece que git svn no obtiene el interruptor de rama local, por lo que cree que todavía está en el tronco o en la rama/etiqueta de salida. Podría valer la pena intentar cambiar la línea de sucursales predeterminada en el archivo de configuración para probar esto. – vasquez