repositorio - git push tag
¿Es posible enviar un alijo de git a un repositorio remoto? (9)
AFAIK la idea de esconder es esconder algo que no es tan importante bajo la alfombra local . Nadie debería saber acerca de su basura favorita ;-) El único "pero" es: ¿Pero si me desarrollo en un par de estaciones de trabajo? Entonces scp
es mucho mejor.
En git, ¿es posible crear un alijo, enviar el alijo a un depósito remoto, recuperar el alijo en otra computadora y aplicar el alijo?
¿O son mis opciones?
- Crea un parche y copia el parche a la otra computadora, o
- Crear una rama menor y comprometer el trabajo incompleto a esa rama?
Es un poco tarde, pero esta respuesta podría ayudar a alguien. Quería saber esto porque quería poder insertar una característica en progreso / error / lo que sea y trabajar desde el mismo punto en otra computadora.
Lo que funciona para mí es comprometer mi código en progreso (en una rama en la que estoy trabajando solo). Cuando llegue a mi otra computadora, haga un pull, luego deshaga la confirmación con:
git reset --soft HEAD^
Continúe trabajando como estaba, con todos sus cambios en progreso allí, sin compromiso y sin instancia.
Espero eso ayude.
Llego un poco tarde a la fiesta, pero creo que encontré algo que me funciona con respecto a esto y también podría serlo si sus circunstancias son las mismas o similares.
Estoy trabajando en una función en su propia rama. La rama no se fusionó con la maestra y se presionó hasta que finalizó o realicé confirmaciones que me siento cómodo mostrando al público. Entonces, lo que hago cuando quiero transferir cambios sin etapas a otra computadora es:
- Realice una confirmación, con un mensaje de confirmación como "
[non-commit] FOR TRANSFER ONLY
", con el contenido que desea transferir. - Ingresa a la otra computadora.
Entonces hazlo:
git pull ssh+git://<username>@<domain>/path/to/project/ rb:lb
La URL puede diferir para usted si accede a su repositorio de una manera diferente. Esto generará cambios desde esa URL desde la rama remota "rb" a la rama local "lb". Tenga en cuenta que tengo un servidor ssh ejecutándose en mi propia computadora, y puedo acceder al repositorio de esa manera.
git reset HEAD^
(implica--mixed
)Esto restablece el CABEZAL para apuntar al estado antes de la confirmación "[no comprometer]".
Desde git-reset (1): " --mixed
: restablece el índice pero no el árbol de trabajo (es decir, los archivos modificados se conservan pero no se marcan para commit) [...]"
Por lo tanto, al final tendrá sus cambios en los archivos, pero no se realizan confirmaciones para dominar y no es necesario un alijo.
Sin embargo, esto requerirá que git reset --hard HEAD^
en el repositorio en el que hiciste el "[non-commit]", ya que ese commit es basura.
Lo siguiente no funciona con el alijo, pero con los cambios no confirmados en el directorio de trabajo. Crea una bifurcación, confirma automáticamente todos los cambios actuales y empuja al control remoto:
commit_and_push_ ( ) {
# This will:
# 1. checkout a new branch stash-XXX
# 2. commit the current changes in that branch
# 3. push the branch to the remote
local locbr=${1:-autostash-XXX}
git checkout -b $locbr
git add .
git commit -a -m "Automatically created commit"
git push origin $locbr
echo "Autocommitted changes in branch $locbr ..."
}
Use como:
commit_and_push_ my-temp-branch
commit_and_push_
Me gustaría ir con un segundo enfoque, aunque no tengo idea de por qué no puedes comprometerlo con la rama maestra / presentada. También es posible hacer cherry-picking.
Parece que hay un truco muy bueno para resolver esto. puede usar git diff > file.diff
(y confirmar el archivo), luego restaure los cambios usando git apply file.diff
(desde cualquier lugar) para lograr el mismo resultado.
Esto fue explicado here también.
Solo usa Dropbox como lo hizo este tipo. De esta forma, no tendrá que preocuparse por empujar los escondites, ya que se hará una copia de seguridad de todo su código.
Nota: Acabo de reescribir esta respuesta con 24 horas más de git-fu bajo mi cinturón :) En mi historia de shell, todo el shebang ahora es de tres líneas. Sin embargo, los he descondensado para su conveniencia.
De esta manera, espero que puedas ver cómo hice las cosas, en lugar de tener que copiar / pegar cosas a ciegas.
Aquí está paso por paso.
Supongamos que la fuente está en ~ / OLDREPO que contiene depósitos. Crea un clon de TEST que no contenga escondites:
cd ~/OLDREPO
git clone . /tmp/TEST
Empuje todos los stashes como ramas temp:
git send-pack /tmp/TEST $(for sha in $(git rev-list -g stash); /
do echo $sha:refs/heads/stash_$sha; done)
Bucle en el extremo receptor para transformar nuevamente en stashes:
cd /tmp/TEST/
for a in $(git rev-list --no-walk --glob=''refs/heads/stash_*'');
do
git checkout $a &&
git reset HEAD^ &&
git stash save "$(git log --format=''%s'' -1 HEAD@{1})"
done
Limpia tus ramas temporales si quieres
git branch -D $(git branch|cut -c3-|grep ^stash_)
Haz una lista secreta de git y harás algo como esto:
stash@{0}: On (no branch): On testing: openmp import
stash@{1}: On (no branch): On testing: zfsrc
stash@{2}: On (no branch): WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue
stash@{3}: On (no branch): WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default
stash@{4}: On (no branch): WIP on xattrs: 3972694 removed braindead leftover -O0 flag
stash@{5}: On (no branch): WIP on testing: 3972694 removed braindead leftover -O0 flag
stash@{6}: On (no branch): WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{7}: On (no branch): WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{8}: On (no branch): WIP on testing: 28716d4 fixed implicit declaration of stat64
stash@{9}: On (no branch): WIP on emmanuel: bee6660 avoid unrelated changes
En el repositorio original, el mismo parecía
stash@{0}: WIP on emmanuel: bee6660 avoid unrelated changes
stash@{1}: WIP on testing: 28716d4 fixed implicit declaration of stat64
stash@{2}: WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{3}: WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock
stash@{4}: WIP on testing: 3972694 removed braindead leftover -O0 flag
stash@{5}: WIP on xattrs: 3972694 removed braindead leftover -O0 flag
stash@{6}: WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default
stash@{7}: WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue #57)
stash@{8}: On testing: zfsrc
stash@{9}: On testing: openmp import
No es posible obtenerlo a través de fetch, el espejo refspec es fetch = +refs/*:refs/*
, y aunque el escondite es refs/stash
, no se envía. ¡Un refs/stash:refs/stash
explícito refs/stash:refs/stash
tampoco tiene efecto!
De todos modos, solo sería confuso, ya que no obtendría todos los stashes, solo el último; la lista de stashes es el reflog de ref refs refs/stashes
.