2012-05-04 8 views
5

Tengo una versión de bambú que necesita acceder a una pequeña parte de un gran repositorio de git. Para ahorrar tiempo y espacio en disco, me gustaría verificar solo la parte del repositorio que es relevante para la compilación. Yo ya sé sobre cajas superficiales. Quiero hacer más que eso y restringir el pago a solo una carpeta (y sus descendientes).¿Cómo puedo verificar solo una parte de un repositorio de git durante una compilación de bambú?

veo esta opción y creo que esto es lo que tengo que usar, pero no he sido capaz de hacerlo funcionar: enter image description here

¿Cómo puedo hacer el pago y envío mínimo que yo quiero?

Respuesta

2

Lo más fácil es, probablemente, tener a quien hospeda la etiqueta repo y confirmar el árbol en particular que desee. Por ejemplo,

En aguas arriba:

git tag quickie $(git commit-tree $(git rev-parse HEAD:path/to/dir) </dev/null) 

que:

git fetch upstream quickie 

Si desea que la cesión temporal aguas arriba para rastrear automáticamente un sub-árbol en una rama, puede hacerlo (una versión adecuada descifrado de) algo como esto:

sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x 

que es más simple de lo que parece. Prueba esto:

mkdir ~/tryitout && cd ~/tryitout && git init foo && git init bar --bare 
cat >bar/hooks/post-receive <<'EOF' 
sed -n 's,^[^ ]* [^ ]* refs/heads/master$,git update-ref refs/heads/master-subtree -m "Auto-tracking master" $(git commit-tree master:subtree -m "Auto-tracking master subtree" $(test -r refs/heads/master-subtree \&\& echo -p refs/heads/master-subtree)),p' | sh -x 
EOF 
chmod a+x bar/hooks/post-receive 
cd foo 
mkdir subtree && touch subtree/oooo && git add . && git commit -am- 
git push ../bar master 

Late Actualización -

Si va a compartir un sistema de archivos con el otro repo, se puede hacer esto:

git clone --no-checkout /path/to/local/repo/.git subtree 
cd subtree 
git commit-tree origin/rev:subtree </dev/null | xargs git checkout -B peek 

y puede rebotar en torno a las cambiará el rev para adaptarse, origen/maestro: incluir, origen/siguiente: incluir, origen/v1.4: somewhereelsenow, lo que sea.

Generalmente tengo una rama "vacía" para grandes repositorios. Git maneja un caso especial de un directorio vacío:

git mktree </dev/null | xargs git commit-tree | xargs git checkout -b empty 
+1

p.s. HEAD puede ser, por supuesto, cualquier rev que desee – jthill

+0

Pero, ¿entonces no sería necesario mantener la etiqueta? Es decir, si una parte relevante del repos cambia, entonces tendríamos que seleccionar cuidadosamente ese cambio en la etiqueta. ¿O estoy malentendido? –

+0

@AndrewEisenberg Necesitas una referencia para todo lo que vas a buscar. Añadiré una línea para mostrar cómo crear un subárbol automático en sentido ascendente en un subárbol – jthill

Cuestiones relacionadas