superfly significado nike english mercurial

significado - Hacer que los subrepositorios mercuriales se comporten como subversiones externas



mercurial vapor (2)

Las preguntas frecuentes y hginit.com han sido realmente útiles para ayudarme a hacer la transición de svn a hg.

Sin embargo, cuando se trata de usar la función de subrepositorio de Hg a la manera de los elementos externos de la subversión, lo he intentado todo y no puedo replicar el buen comportamiento de svn externals.

Este es el ejemplo más simple de lo que quiero hacer:

  1. Repositorio init "lib" Este repositorio nunca debe usarse como independiente; siempre está incluido en los repositorios principales, como un sub-repositorio.

  2. Inicia uno o más incluyendo repositorios Para mantener el ejemplo simple, voy a "iniciar" un repositorio llamado "principal"

  3. Tener "main" incluir "lib" como un subrepositorio

  4. Es importante: Y ESTO ES LO QUE NO PUEDO OBTENER PARA TRABAJAR: cuando modifico un archivo dentro de "main / lib", y presiono la modificación, ese cambio se envía al repositorio "lib" - NO a una copia dentro de "principal".

Las líneas de comando hablan más que las palabras. He intentado muchas variaciones sobre este tema, pero esta es la esencia. Si alguien puede responder, en líneas de comando, ¡estaré eternamente agradecido!

1. Iniciar el repositorio "lib"

$ cd / home / moi / hgrepos ## Donde estoy almacenando mis repositorios de hg, en mi servidor principal

$ hg init lib

$ echo "foo"> lib / lib.txt

$ hg add lib

$ hg ci -A -m "Init lib" lib

2. Inicie el repositorio "principal" e incluya "lib" como un subrepos

$ cd / home / moi / hgrepos

$ hg init main

$ echo "foo"> main / main.txt

$ hg add main

$ cd main

$ hg clone ../lib lib

$ echo "lib = lib"> .hgsub

$ hg ci -A -m "Init main".

Todo funciona bien, pero cuando hago un clon del repositorio "principal", y realizo modificaciones locales a los archivos en "main / lib", y los presiono, los cambios son empujados a "main / lib", NO a "lib ".

EN COMMAND-LINE-ESE, ESTE ES EL PROBLEMA:

$ / home / moi / hg-test

$ hg clone ssh: //[email protected]/hgrepos/lib lib

$ hg clone ssh: //[email protected]/hgrepos/main main

$ cd main

$ echo foo >> lib / lib.txt

$ hg st

M lib.txt

$ hg com -m "Lib.txt modificado, desde dentro del repositorio principal" lib.txt

$ hg push

presionando a ssh: //[email protected]/hgrepos/main/lib

La última línea de salida de hg muestra el problema.

Muestra que hice una modificación a una COPIA de un archivo en lib, NO a un archivo en el repositorio de lib. Si esto funcionara como me gustaría, el impulso sería para hgrepos / lib, NO para hgrepos / main / lib. Es decir, vería:

$ hg push

presionando a ssh: //[email protected]/hgrepos/lib

SI PUEDES RESPONDER ESTO EN TÉRMINOS

DE LÍNEAS DE COMANDOS EN LUGAR DE EN INGLÉS,

¡SERÉ ETERNAMENTE AGRADECIDO!

¡Gracias de antemano!

Emily en Portland


El problema es con su archivo .hgsub. Señala dónde está el repositorio de lib, así que si lib es un hermano para main debería ser:

lib=../lib

Además, su hg add lib y hg add main lines no tienen sentido. ¿A qué repositorio fuera de main y lib se están agregando? Los estás ejecutando mientras estás en /home/moi/hgrepos .

Aquí está tu script con algunos ajustes:

+ cd /home/ry4an/hgtest + hg init lib + echo foo + cd lib + hg commit -A -m Init lib adding lib.txt + cd /home/ry4an/hgtest + hg init main + echo foo + cd main + echo lib=../lib + hg clone ../lib destination directory: lib updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + hg add .hgsub main.txt + hg commit -m Init main: initial file and a .hgsub committing subrepository lib + cd /home/ry4an/hgtest + hg clone main main-clone updating to branch default pulling subrepo lib requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + cd main-clone + echo foo + hg commit -m Modified lib.txt, from inside the main repos committing subrepository lib + hg push pushing to /home/ry4an/hgtest/main pushing subrepo lib searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files

Para hacer eso a través de ssh: // solo necesitas hacer un solo cambio. Al clonar el repo principal cambiar hg clone main main-clone a hg clone ssh://host/hgtest/main main-clone - clonar el principal automáticamente clona la lib - ese es el beneficio del subrepo.

Aquí hay un registro de ese trabajo:

+ cd /home/ry4an/hgtest + hg init lib + echo foo + cd lib + hg commit -A -m Init lib adding lib.txt + cd /home/ry4an/hgtest + hg init main + echo foo + cd main + echo lib=../lib + hg clone ../lib destination directory: lib updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + hg add .hgsub main.txt + hg commit -m Init main: initial file and a .hgsub committing subrepository lib + cd /home/ry4an/hgtest + hg clone ssh://localhost/hgtest/main main-clone The authenticity of host ''localhost (::1)'' can''t be established. RSA key fingerprint is 0c:58:d6:d3:d3:16:14:ee:3b:be:01:bc:c7:3c:92:0b. Are you sure you want to continue connecting (yes/no)? yes ry4an@localhost''s password: requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 3 changes to 3 files updating to branch default pulling subrepo lib ry4an@localhost''s password: requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files 3 files updated, 0 files merged, 0 files removed, 0 files unresolved remote: Warning: Permanently added ''localhost'' (RSA) to the list of known hosts. + cd main-clone + echo foo + hg commit -m Modified lib.txt, from inside the main repos committing subrepository lib + hg push ry4an@localhost''s password: pushing to ssh://localhost/hgtest/main pushing subrepo lib ry4an@localhost''s password: searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files


Vaya, disculpa por el formato en la respuesta anterior. Aquí está de nuevo, formateado!

Entonces, aquí están los dos escenarios que la mayoría de la gente enfrentará:

A) Usar subrepositorios en una situación completamente local. Esta es la solución de Ryan, esencialmente. Me imagino que solo los desarrolladores que trabajan en solitario estarán en este barco.

cd /home/moi/hgrepos hg init lib cd lib echo foo > lib.txt hg ci -A -m Init cd /home/moi/hgrepos hg init main cd main echo foo > main.txt echo lib = ../lib > .hgsub hg clone ../lib hg add .hgsub main.txt hg ci -m Init cd /home/moi/hgrepos hg clone main main-clone cd main-clone/lib echo "Modified while on main trunk" >>lib.txt hg commit -m "Modified lib.txt, while on main trunk" hg push cd /home/moi/hgrepos/lib hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved cat lib.txt foo Modified while on main trunk

-------------------------------------------------- ---------------

B) Usar subrepositorios en ssh.
Me imagino que la mayoría de los desarrolladores que trabajan en equipos estarán en este barco.

1) Configurar lib

cd /home/moi/hgrepos hg init lib cd lib echo foo > lib.txt hg ci -A -m Init

2) Configurar el principal

cd /home/moi/hgrepos hg init main cd main echo foo > main.txt echo lib=ssh://[email protected]/hgrepos/lib > .hgsub hg clone ssh://[email protected]/hgrepos/lib lib hg add .hgsub main.txt hg ci -m Init

3) Clone lib a hgtest dir

cd /home/moi/hgtest hg clone ssh://[email protected]/hgrepos/lib lib

4) Clon principal a hgtest dir

cd /home/moi/hgtest hg clone ssh://[email protected]/hgrepos/main main

5) Modificar lib.txt mientras está en el tronco principal

cd /home/moi/hgtest/main/lib echo "Modified while on main trunk" >>lib.txt hg commit -m "Modified lib.txt, while on main trunk" hg push

6) Verificar que lib.txt haya cambiado en el repositorio lib

cd /home/moi/hgtest/lib hg pull hg update 1 files updated, 0 files merged, 0 files removed, 0 files unresolved cat lib.txt foo Modified while on main trunk