Git estableció la twig de seguimiento mientras estaba fuera de línea

git push -u origin branch

ata la twig con el origen / twig para que los siguientes empujes de la twig puedan ser simplemente git push , por lo que yo entiendo.

¿Puedo configurar este tipo de seguimiento para un repository nuevo (el origen / la sucursal aún no existe) mientras estoy fuera de línea? Quiero hacerlo para que todos los cambios subsiguientes de la sucursal vayan a origen / sucursal sin que yo tenga que especificar eso cuando estoy en línea.

xyz como el nombre de la twig y mantendré el origin como el nombre del control remoto para evitar confusiones. Ya mencionaste el método en línea para impulsar y configurar el flujo ascendente al mismo time.

 git push --set-upstream origin xyz 

Obtener en línea, configurar upstream offline

La forma preferida sería search la twig antes de desconectarse y usar la --set-upstream-to de la git branch para configurar la transmisión sin necesidad de presionar.

 git branch --set-upstream-to origin/xyz 

Eso resulta en agregar las siguientes líneas a .git/config que también es el resultado de la forma en línea descrita anteriormente.

 [branch "xyz"] remote = origin merge = refs/heads/xyz 

Enfoque totalmente fuera de línea

Cuando no desee search primero la twig remota, puede editar .git/config a mano o usar la function de git config para realizar la misma acción.

 git config branch.xyz.remote origin git config branch.xyz.merge refs/heads/xyz 

Cuando busque la bifurcación remota, debería haber alcanzado el mismo resultado que con --set-upstream-to con la bifurcación remota ya recuperada.

Enfoque alternativo sin connection

En su lugar, puede imitar la búsqueda fuera de línea configurando la reference de la twig remota a una confirmación específica, por ejemplo, a la misma confirmación que su sucursal local.

 git update-ref refs/remotes/origin/xyz xyz git branch --set-upstream-to origin/xyz 

La idea de la actualización directa de ref se toma prestada de la respuesta de Decave. Use con cuidado y lea las notas de git-fetch(1) sobre las git-fetch(1) de avance rápido / avance rápido.

De acuerdo, hagámosnos un git .

El lugar donde git almacena references a sucursales remotas se encuentra en .git/refs/remotes/<remote_repo> . Digamos que acabamos de crear un nuevo repository y agregamos el control remoto como origen. Luego nos desconectamos y creamos una nueva twig llamada new_branch .

Si .git/refs/remotes/origin un vistazo a .git/refs/remotes/origin , deberías ver:

 decave@demo~$ls /home/decave/demo/.git/refs/remotes/origin HEAD 

No hay twigs allí; lo cual es de esperar dado que no hemos empujado o sacado ninguna twig del repository remoto. Ahora, digamos que new_branch apuntaba a una confirmación con hash e81d5ea59b5f7ab81de4662f7dca5de86e230d92 . Si agregamos un file a .git/refs/remotes/origin llamado new_branch con su contenido establecido en e81d5ea59b5f7ab81de4662f7dca5de86e230d92 , entonces sería equivalente a decirle a su repository local "hey, new_branch es una sucursal en el origen que apunta a la confirmación e81d5ea59b5f7ab81de4662f7dca5de86e230d92 ". Esto se puede lograr con el command de git update-ref plomería git update-ref :

 git update-ref refs/remotes/origin/new_branch e81d5ea59b5f7ab81de4662f7dca5de86e230d92 

Entonces, si ejecutas el command

 git branch --set-upstream-to origin/new_branch 

Debe configurar git para que haga lo que desea.

Tenga en count que esto es una práctica bastante terrible para comenzar a search en su propio repository de esta manera. La forma correcta de hacer que esto ocurra sería usar la bandera -u como dijiste.