tag - ¿Cómo puedo listar los subárboles de git en la raíz?
git tag best practices (2)
No hay ninguna forma explícita de hacerlo (al menos por ahora), los únicos comandos disponibles se enumeran aquí (como se señaló a sí mismo, pero aquí hay una referencia para los futuros solicitantes): https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt
Revisé el código (básicamente, todo este mecanismo es un archivo de script de shell grande), todo el seguimiento se realiza a través de mensajes de confirmación, por lo que todas las funciones usan git log
mecanismo de git log
con mucha grepificación para localizar sus propios datos.
Como el subárbol debe tener una carpeta con el mismo nombre en la carpeta raíz del repositorio, puede ejecutar esto para obtener la información que desea (en el shell Bash):
git log | grep git-subtree-dir | tr -d '' '' | cut -d ":" -f2 | sort | uniq
Ahora bien, esto no comprueba si la carpeta existe o no (puede eliminarla y el mecanismo del subárbol no lo sabrá), así es como puede enumerar solo los subárboles existentes, esto funcionará en cualquier carpeta en el repositorio:
git log | grep git-subtree-dir | tr -d '' '' | cut -d ":" -f2 | sort | uniq | xargs -I {} bash -c ''if [ -d $(git rev-parse --show-toplevel)/{} ] ; then echo {}; fi''
Si realmente estás preparado, se lo propones a los chicos de Git para incluirlo en las próximas versiones :)
Por ejemplo, puedes hacer un git remote --verbose
y git mostrarán todos los controles remotos que tienes en tu proyecto, git branch
mostrará todas las ramas y señalizará la rama actual, pero ¿cómo hacer una lista de todos los subárboles, sin ningún comando destructivo? git subtree
dará ejemplos de uso, pero no mostrará nada. el subárbol solo tiene add
, pull
, push
, split
, merge
.
Siguiendo la respuesta de Sagi Illtus , agrega el siguiente alias a tu ~/.gitconfig
[alias]
ls-subtrees = !"git log | grep git-subtree-dir | awk ''{ print $2 }''"
Luego puedes git ls-subtrees
desde la raíz de tu repositorio para mostrar todas las rutas del subárbol:
$> cd /path/to/repository
$> git ls-subtrees
some/subtree/dir