tipos tag remove practices etiquetas create best git

remove - git tags best practices



tirar/empujar desde mĂșltiples ubicaciones remotas (14)

El resumen: ¿hay una manera de hacer que un repositorio de git se presione y se extraiga de una lista de repositorios remotos (en lugar de un solo "origen")?

Largo: a menudo tengo una situación cuando desarrollo una aplicación en varias computadoras, con conectividad diferente, por ejemplo, una computadora portátil en tránsito, una computadora "A" mientras estoy en una ubicación determinada y otra computadora "B "mientras que en otro. Además, la computadora portátil puede tener conectividad solo con "A" o "B", y algunas veces con ambas.

Lo que me gustaría es que git siempre "tire" y "empuje" a todas las computadoras a las que se puede conectar actualmente, por lo que es más fácil saltar de una máquina a otra y continuar trabajando sin problemas.


Añadiendo nuevo control remoto

git remote add upstream https://github.com/example-org/example-repo.git git remote -vv

Obtener múltiples ubicaciones

git fetch --all

Empujar a lugares

git push -u upstream/dev


Agregar all control remoto se vuelve un poco tedioso, ya que debe configurarlo en cada máquina que use.

Además, los alias de bash y git siempre que todos asuman que usted tendrá que empujar a todos los controles remotos. (Por sshag tengo una bifurcación de sshag que mantengo en github y gitlab. He agregado el control remoto ascendente , pero no tengo permiso para hacerlo).

Aquí hay un alias de git que solo empuja a los controles remotos con una url de inserción que incluye @ .

psall = "!f() { / for R in $(git remote -v | awk ''/@.*push/ { print $1 }''); do / git push $R $1; / done / }; f"


Agregué dos pushurl separados al "origen" remoto en el archivo conggig .git. Cuando ejecuto git push origin "branchName" , se ejecutará y se enviará a cada url. No estoy seguro de si hay una forma más fácil de lograr esto, pero esto funciona para mí mismo al ingresar al código fuente de Github y al código fuente de My.visualStudio al mismo tiempo.

[remote "origin"] url = "Main Repo URL" fetch = +refs/heads/*:refs/remotes/origin/* pushurl = "repo1 URL" pushurl = "reop2 URl"


Agregué estos alias a mi ~ / .bashrc:

alias pushall=''for i in `git remote`; do git push $i; done;'' alias pullall=''for i in `git remote`; do git pull $i; done;''


Aquí está mi ejemplo con el script bash dentro de la sección de alias .gitconfig

[alias] pushall = "!f(){ for i in `git remote`; do git push $i; done; };f"


La última versión de git (a partir de octubre de 2012) le permite hacer esto desde la línea de comandos:

git remote set-url origin --push --add user1@repo1 git remote set-url origin --push --add user2@repo2 git remote -v

Luego, git push presionará a user1 @ repo1, luego presionará a user2 @ repo2. Deje afuera - --push si también quiere poder git pull de ellos.


Me tomé la libertad de ampliar la answer desde nona-urbiz; solo agrega esto a tu ~ / .bashrc:

git-pullall () { for RMT in $(git remote); do git pull -v $RMT $1; done; } alias git-pullall=git-pullall git-pushall () { for RMT in $(git remote); do git push -v $RMT $1; done; } alias git-pushall=git-pushall

Uso:

git-pullall master git-pushall master ## or git-pushall

Si no proporciona ningún argumento de bifurcación para git-pullall, la extracción de los controles remotos no predeterminados fallará; Dejó este comportamiento como está, ya que es análogo a git.


Necesitarás un script para recorrerlos. Git no proporciona un "empuje todo". Teóricamente, podría hacer una inserción en varios subprocesos, pero un método nativo no está disponible.

Fetch es aún más complicado, y recomendaría hacerlo de forma lineal.

Creo que su mejor respuesta es tener una máquina a la que todos presionen / tiren, si es posible.


Para actualizar los controles remotos (es decir, el caso de pull ), las cosas se han vuelto más fáciles.

La declaración de Linus

Lamentablemente, ni siquiera hay una manera de falsificar esto con un alias de git.

en la entrada referida en la lista de correo de Git en la respuesta de elliottcable ya no es cierto.

git fetch aprendió el parámetro --all en algún lugar del pasado que permite recuperar todos los controles remotos de una sola vez.

Si no se solicitan todos, se podría usar el interruptor --multiple para especificar varios controles remotos o un grupo.


Puedes agregar mandos a distancia con:

git remote add a urla git remote add b urlb

Luego, para actualizar todos los repos.

git remote update


Puedes configurar múltiples repositorios remotos con el comando git remote :

git remote add alt alt-machine:/path/to/repo

Para obtener de todos los controles remotos configurados y las ramas de seguimiento de actualización, pero no fusionar en HEAD, haga:

git remote update

Si no está conectado actualmente a uno de los controles remotos, tomará un tiempo de espera o lanzará un error, y continuará con el siguiente. Tendrá que fusionarse manualmente desde los repositorios obtenidos, o cherry-pick, dependiendo de cómo quiera organizar los cambios de recolección.

Para obtener la rama maestra de alt y colocarla en tu cabeza actual, haz:

git pull alt master

Entonces, de hecho, git pull es casi una abreviatura de git pull origin HEAD (en realidad se ve en el archivo de configuración para determinar esto, pero se entiende la idea).

Para impulsar actualizaciones, tienes que hacer eso en cada repo manualmente. Creo que un empuje fue diseñado teniendo en cuenta el flujo de trabajo del repositorio central.


Quería trabajar en VSO / TFS, y luego empujar públicamente a GitHub cuando esté listo. Repo inicial creado en VSO privado. Cuando llegó el momento de agregar a GitHub hice:

git remote add mygithubrepo https://github.com/jhealy/kinect2.git git push -f mygithubrepo master

Trabajó como un campeón ...

Para una verificación de validez, emita "git remote -v" para enumerar los repositorios asociados con un proyecto.

C:/dev/kinect/vso-repo-k2work/FaceNSkinWPF>git remote -v githubrepo https://github.com/jhealy/kinect2.git (fetch) githubrepo https://github.com/jhealy/kinect2.git (push) origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (fetch) origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (push)

De manera simple, funcionó para mí ... Espero que esto ayude a alguien.


agregue un alias a gitconfig global (/home/user/.gitconfig) con el siguiente comando.

git config --global alias.pushall ''!f(){ for var in $(git remote show); do echo "pushing to $var"; git push $var; done; }; f''

Una vez que ingresas el código, decimos

git push

para empujar a origen por defecto. Después del alias anterior, podemos decir

git pushall

y el código se actualizará a todos los controles remotos, incluido el origen remoto.


¡Hacer esto manualmente ya no es necesario , con versiones modernas de git ! Ver la solución de Malvineous , a continuación.

Reproducido aquí:

git remote set-url origin --push --add <a remote> git remote set-url origin --push --add <another remote>

Respuesta original:

Este algo que he estado usando durante bastante tiempo sin malas consecuencias y sugerido por Linus Torvalds en la lista de correo de git .

La solución de araqnid es la adecuada para llevar el código a su repositorio ... pero cuando usted, como yo, tenemos múltiples flujos ascendentes autorizados equivalentes (mantengo algunos de mis proyectos más críticos clonados tanto en un upstream privado, GitHub y Codaset), Puede ser un dolor empujar cambios a cada uno, todos los días.

En pocas palabras, git remote add todos tus controles remotos individualmente ... y luego git config -e y agrega un control remoto combinado. Suponiendo que tiene esta config repositorio:

[remote "GitHub"] url = [email protected]:elliottcable/Paws.o.git fetch = +refs/heads/*:refs/remotes/GitHub/* [branch "Master"] remote = GitHub merge = refs/heads/Master [remote "Codaset"] url = [email protected]:elliottcable/paws-o.git fetch = +refs/heads/*:refs/remotes/Codaset/* [remote "Paws"] url = [email protected]:Paws/Paws.o.git fetch = +refs/heads/*:refs/remotes/Paws/*

... para crear un remoto combinado para "Paws" y "Codaset" , puedo agregar lo siguiente después de todos esos:

[remote "Origin"] url = [email protected]:Paws/Paws.o.git url = [email protected]:elliottcable/paws-o.git

Una vez que haya hecho esto, cuando haya git push Origin Master , se enviará secuencialmente a Paws/Master y Codaset/Master , haciendo la vida un poco más fácil.