una - git: encuentra todos los repositorios locales no comprometidos en un árbol de directorios
ignorar toda una carpeta git (8)
¿Algo a lo largo de estas líneas?
$ for i in /data/*/; do (cd $i && (echo $i; git status)); done $ for i in /data/*/; do (cd $i / > && (git status | grep -qx ''nothing to commit (working directory clean)'' / > || (echo $i && git status))); done
Tengo un grupo (10-15) de repositorios locales de git en algún lugar de mi sistema de archivos, pero todos en la carpeta / data /
Quiero encontrar todas / cualquier carpeta que tenga cambios no confirmados. ¿Cómo puedo hacer eso? Algo así como una variante de git status
global recursiva.
Todas las respuestas se equivocaron, creo. Cualquier comando git solo funciona dentro de la carpeta que está bajo el control de git. Necesito algo para buscar esas carpetas.
Así que en vez escribí este script que hace esto:
#!/usr/bin/env ruby
require ''find''
require ''fileutils''
#supply directory to search in as argument
@pat = ARGV[0]
(puts "directory argument required"; exit) unless @pat
Dir.chdir(@pat)
Find.find(@pat) do |path|
if FileTest.directory?(path)
Dir.chdir(path)
resp = `git status 2>&1`
unless resp =~ /fatal|nothing to commit /(working directory clean/)/i
puts "#{''#''*10}/n#{Dir.pwd}#{''#''*10}/n#{resp}"
Find.prune
end
Dir.chdir(@pat)
end
end
El comando de find
es tu amigo, junto con un poco de magia de concha.
find . -type d -name ''.git'' | while read dir ; do sh -c "cd $dir/../ && echo -e /"/nGIT STATUS IN ${dir///.git/}/" && git status -s" ; done
No creo que git tenga esta versión incorporada, así que (también) creé un script para hacer esto: https://github.com/mnagel/clustergit
El problema con los fragmentos de código publicados aquí es que se rompen a medida que cambia el formato de salida del git status
de git status
. Mi script tiene el mismo problema (ya que básicamente funciona de la misma manera), pero al menos siempre obtienes la última versión.
No es muy elegante para el formateo, pero ¿qué tal algo como
find . -iname ".git" -type d | sed -rne "s|(.+)//.git|echo /1;cd /1;git status;cd /data|p" | bash
Puede usar " git ls-files --modified --deleted --exclude-standard" para enumerar todos los archivos modificados y eliminados ( --exclude-standard
probablemente no sea necesario allí, pero en caso de que quiera enumerar todos los archivos desconocidos que no se ignoran con --other
...). A continuación, puede comprobar si la salida de este comando está vacía.
O puede verificar el estado de salida de " git diff --quiet HEAD" si desea verificar si "git commit -a" se recupera de algo, o "git diff --cached --quiet HEAD" si desea verificar si "git commit" escogiera algo (o uno de sus parientes de plomería: git-diff-files
o git-diff-index
).
También hay un script de shell llamado multi-git-status
que hace esto.
Simplemente use el comando mgitstatus
(con un argumento de nombre de directorio opcional):
for rp in /srv/*/
do
printf ''/ec''
cd "$rp"
git status
echo "${rp%/}"
read
done