Eliminar una twig en un clon superficial

Estoy trabajando en un clon superficial de un repository git. Como el clon superficial solo muestra una twig de seguimiento remoto en el file .git / config, para get nuevas twigs remotas, necesito agregarlas explícitamente. Por ejemplo

git clone --depth 1 <remote-url> git remote set-branches --add origin <branch-name> git fetch --depth 1 origin <branch-name> git checkout <branch-name> 

Más tarde si borro la twig

 git checkout master git branch --delete <branch-name> 

y empujar la eliminación al control remoto

 git push --delete origin <branch-name> 

Tengo un problema. Cuando pull o obtengo el post de error

fatal: no se pudo encontrar la reference remota <nombre-twig>

No hay opción --remove correspondiente a git remote set-branches --add entonces, ¿cómo git remote set-branches --add la twig faltante? ¿Es una cuestión de editar el file .git / config para eliminar la línea

 fetch = +refs/heads/<branch-name>:refs/remotes/origin/<branch-name> 

o hay una forma less oculta de hacerlo? Me sorprende que al presionar la eliminación de la twig no pode la línea de búsqueda.

Opción 1: ¿evitar el problema?

El problema se puede evitar si no le dices explícitamente a git qué twigs quieres que capte. (Pero si necesita search solo un set seleccionado de twigs, probablemente sea mejor pasar a la opción 2.) Cuando crea el clon, puede decir que quiere todas las twigs

 git clone --depth=1 --no-single-branch ... 

O si ya clonaste y quieres get el rest de las sucursales: de tus instrucciones, en lugar de

 git remote set-branches --add origin <branch-name> 

que configura fetch para search una twig específica, podrías

 git config --unset remote.origin.fetch git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* git fetch --depth=1 

Eliminar una twig (local y remota) ya no causa un problema.

(Puede usar un patrón más selectivo, pero en los casos en que no desee "todo", se puede apostar por elegir twigs individuales).

Si ya tiene el repository y ha agregado algunas twigs de la manera que describe arriba, los commands de configuration similares a los que he enumerado deberían "repararlo". (Simplemente reemplace --unset con --unset-all en el primer command).

Opción 2: arregle el problema

Pero si necesita su configuration para enumerar twigs individuales, puede manejar la eliminación de una de estas maneras:

Puede usar git config para eliminar directamente la configuration sin editar manualmente ningún file.

 git config --unset remote.origin.fetch <branch-name> 

Tenga en count que <branch-name> se interpreta como una expresión regular, y si coincide con varios valores, no funcionará. Entonces, si recibes una advertencia sobre varios valores coincidentes, tendrías que hacer algo como

 git config --unset remote.origin.fetch origin.<branch-name>$ 

O puede usar git remote set-branches :

Si bien no existe una git remote set-branches --remove explícita de git remote set-branches --remove o algo por el estilo, puede usar set-branches sin el indicador --add para reiniciar por completo la list de sucursales remotas. Si no tienes muchas otras twigs, esto funcionaría. Por ejemplo, dado solo lo que se muestra arriba, podrías hacer

 git remote set-branches origin master 

Pero si agregaste muchas otras twigs, tendrías que includelas o perderlas.

 git remote set-branches origin master branch1 branch2 branch3 ... 

Puede automatizar el process para get la list de sucursales

 git branch | sed s/'\* '// | xargs git remote set-branches origin 

Pero eso tendría un problema si alguna de las sucursales locales, de hecho, no está destinada a rastrear el origen.