¿Cómo hacer git repo recordar todos los controles remotos?

Tengo un git repo que es una bifurcación de otro repo. Como regla, normalmente agregaré un control remoto llamado en sentido ascendente, que es el repository original desde el cual he bifurcado.

$ git remote -v origin [email protected]github.com:skela/awesomeproject.git (fetch) origin [email protected]:skela/awesomeproject.git (push) upstream git://github.com/bob/awesomeproject.git (fetch) upstream git://github.com/bob/awesomeproject.git (push) 

¿Hay alguna forma de que este control remoto adicional persista en todos los clones? Digamos que elimino mi repository local y hago un:

 git clone [email protected]:skela/awesomeproject.git 

Y ahora vuelvo a verificar mis controles remotos:

 $ git remote -v origin [email protected]:skela/awesomeproject.git (fetch) origin [email protected]:skela/awesomeproject.git (push) 

¡Mi control remoto en sentido ascendente ha desaparecido!

¿Cómo me aseguro de que mi repository git siempre tenga estos 2 alias remotos?

Editar: simplemente agregando la razón principal por la que quiero hacer esto para dar forma a algunas de las respuestas en un path aceptable;)

El objective es tener una sucursal en mi repository que rastree el maestro del upstream.

 [remote "upstream"] url = git://github.com/bob/awesomeproject.git fetch = +refs/heads/*:refs/remotes/upstream/* [branch "father"] remote = upstream merge = refs/heads/master 

En otras palabras, la twig "padre" que está en mi repos rastrea la twig maestra llamada ascendente.

Todo funciona muy bien una vez que lo configuro, pero tan pronto como vuelva a clonar el repository, la twig "padre" apunta al origen en lugar del ascendente.

Eso es imposible. Git solo clona el contenido del repository, nunca su configuration. Si desea instalar controles remotos en su repository (cabe preguntarse si esta es una buena idea), cree un script repo-setup.sh en su raíz repo que haga algo como esto:

 git remote rm origin git remote rm upstream git remote add origin [email protected]:skela/awesomeproject.git git remote add upstream git://github.com/bob/awesomeproject.git 

Ejecute este file después de haber clonado el repository.

Crea un file .gitremotes que completes con el contenido de .git / config relacionado con los controles remotos. Agregue .gitremotes al repository. Después de que el clon añada .git / config con .gitremotes. Nota: puede necesitar una edición manual si los controles remotos que desea compartir (en .gitremotes) tienen un conflicto de nombre con el control remoto que 'git clone' crea automáticamente ('orgin').

Para lograr esto fácilmente, podrías definir una function bash:

 function git-clone-r () { src=$1 tgt=$2 git clone $src $tgt cat ${tgt}/.gitremotes >> ${tgt}/.git/config } 

[Lo anterior no es tan sofisticado; pero ilustra el punto y funciona]

Esta es una versión ligeramente modificada de la solución de GoZoner.

Debe capturar la información sobre todos los controles remotos de .git/config de su repository en un file que pueda almacenar fuera de su repository de git. También debe tener cuidado de actualizar este file cada vez que agregue un nuevo control remoto. De hecho, esto se puede agregar a su repo de git, de modo que el próximo clon o extracción traiga este file.

Comenzando con git 1.7.10+ , git admite include files de configuration externos.

De modo que puede agregar las siguientes líneas a .git/config su repository para include el file de configuration externo que contiene la información remota:

 [include] path = /dir1/dir2/repo-remotes.gitinfo