Repository 32bit  Forum
Repository 64bit  Wiki

git: prelevare lista file

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

git: prelevare lista file

Messaggioda ZeroUno » mer mag 09, 2012 20:46

Di un repository git remoto (protocollo https) ho bisogno di prelevare esclusivamente la lista dei file contenuti.

C'è un modo senza dover scaricare tutto?

Finora sono solo riuscito a minimizzare con
Codice: Seleziona tutto
$ git clone --depth=1 -n https://host/repository.git
$ cd repository
$ git status

che non mi scarica la history e tutti i diff precedenti l'ultimo commit e non mi crea i file (cioè non perde tempo a crearli né mi occupa lo spazio necessario). Lo status me li vede tutti come deleted ma almeno mi dice quali sono.

Ma a prelevare solo la lista non ci sono riuscito.
Utile sarebe anche prelevare il solo output di git log --name-status.

E' fattibile?

EDIT: e nel caso specifico di github, c'è una funzione per poter scaricare la lista di tutti i file e/o del log, senza dover effettuare il browsing?

EDIT2: per github si può prelevare il log con wget https://github.com/user/repo/commits/master.atom che tira fuori l'xml con le info sui commit, inclusi i nomi dei file.

EDIT3: l'xml riporta solo gli ultimi 20 commit :-(
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4411
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: git: prelevare lista file

Messaggioda ZeroUno » gio mag 10, 2012 22:49

Ho fatto una bozza di script che, per github, mi scarica la lista dei file e directory e la data (ma non ci riesce sempre a scaricare la data, non ho capito perchè).
E' un'alta bozza.
Fa una richiesta https per ogni directory; lo script credo che sia anche veloce; lento è github a rispondere. Ci metto di meno a scaricare il repository e dare find -ls

Codice: Seleziona tutto
#!/bin/bash

REPO=/zuno/repo-slack


function getls(){
local DIR
local ST
local TIPO
local FL
local DATE
local R

DIR=$1
if [ "$DIR" == "/" ];then
  DIR=""
fi
ST=0
wget -q -O - https://github.com$REPO/tree/master$DIR|while read R;do
  if [ $ST -eq 0 ];then
    echo "$R"|grep -q "data-permalink-url=\"$REPO/"
    if [ $? -eq 0 ];then
      ST=1
    fi
  elif [ $ST -eq 1 ];then
    echo "$R"|grep -q 'class="content"'
    if [ $? -eq 0 ];then
      TIPO=$(echo "$R"|sed -r -e "s#^.*$REPO/([^/]+)/.*#\1#")
      echo -n "$TIPO|"
      FL=$(echo "$R"|sed -r -e "s#^.*$REPO/[^/]+/[0-9a-f]+/([^ ]+). .*#\1#")
      echo -n "$FL|"
      ST=2
    fi
  elif [ $ST -eq 2 ];then
    DATE=$(echo "$R"|cut -f6 -d\")
    echo $DATE
    ST=1
  fi
done
}

function gettree(){

local DIR
local F
local TIPO
local NOME
local DATA

DIR=$1
for F in $(getls $DIR|tac);do
  TIPO=$(echo $F|cut -f1 -d"|")
  NOME=$(echo $F|cut -f2 -d"|")
  DATA=$(echo $F|cut -f3 -d"|")
  echo "$TIPO $NOME $DATA"
  if [ "$TIPO" == "tree" ];then
    gettree /$NOME
  fi

done
}

gettree
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4411
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current


Torna a Gnu/Linux in genere

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti