Domanda

sul mio server ho ospite progetti mia git personali remote-laterali (con gitosis), e ho costruito un'interfaccia web per navigare i repository (qualcosa come Github).

Sul telecomando-side, è non sono autorizzati a fare un sacco di cose, perché un albero di lavoro manca, e questo è corretto: btw, per un esploratore repository, con pochi comandi che posso fare quasi tutto

ad eccezione di colpa git .

Non sono in grado di trovare il modo di dare la colpa di un file senza un albero di lavoro, all'interno del repository remoto lato. Ha ottenuto alcune idee?

È stato utile?

Soluzione

Il seguente dovrebbe funzionare anche nei repository nudi:

git blame <rev> -- <path>

per es.

git blame master -- README.txt

Altri suggerimenti

  

Io non sono in grado di trovare dove la documentazione git parlano - opzione, dal modo in cui funziona molto

In realtà, questo è necessario perché "git blame" si prepara ad assumere un antico ordine argomento strano "blame <path> <rev>" in aggiunta al solito "blame [<rev>] <path>".

Ciò significa che, come Git 2.17 (Q2 2018) spiegherà "git blame HEAD COPYING" in un repository nudo non è riuscito a correre, mentre "git blame HEAD -- COPYING" gestito bene.

Ma da 2.17 in poi, non sarà necessario '--' più.

commettere 0c668f5 (5 febbraio 2018) da Junio ??Hamano C (gitster)
(fusa per Junio ??Hamano C - gitster - in commettere 0c668f5 , 7 febbraio 2018)

  

blame: stringere riga di comando parser

     

Un antico ordine degli argomenti dispari "blame <path> <rev>" in aggiunta al   solito "blame [<rev>] <path>" ha almeno due negative   ramificazioni:

     
      
  • Per raccontare questi due a parte, controlla se l'ultimo comando   nomi degli argomenti linea di un percorso nella albero di lavoro, che utilizzano   file_exists().
      Tuttavia, "blame <rev> <path>" è una richiesta di   spiegare ogni riga il contenuto di <path> memorizzati nel   revisione <rev> e non ha bisogno di avere una versione albero di lavoro   del file. Un controllo con file_exists() è semplicemente sbagliato.

  •   
  • Per costringere che sbaglia controllo file_exists() al lavoro, il codice   chiamate setup_work_tree() prima di farlo, perché il percorso che ha   è relativo al livello superiore della struttura del progetto.
      Tuttavia, "blame <rev> <path>" deve essere utilizzabile anche in un repository nuda,   e non v'è alcuna ragione per lasciare setup_work_tree() lamentano   e morire con "Questa operazione deve essere eseguita in un albero di lavoro".

  •   
     

Per correggere l'ex, interruttore per controllare se l'ultimo token è una   revisione (e in tal caso, gli argomenti di parsing che utilizzano "blame <path> <rev>"   regola).

     

Correggere quest'ultimo per sbarazzarsi di setup_work_tree() e   controllo file_exists() - l'unico caso la chiamata a questo importa funzione   è quando ci sono in esecuzione "blame <path>" (vale a dire senza iniziando revisione e   chiedendo di dare la colpa al file di albero di lavoro a <path>, scavando attraverso la   HEAD revisione), ma v'è una chiamata in setup_scoreboard() solo   prima di chiamare fake_working_tree_commit().

Così, in breve, a partire Git 2.17, questo funzionerà in un repo nuda:

git blame master -- README.txt

E con Git 2.22, il messaggio di errore "This operation must be run in a work tree" dovrebbe scomparire!

"git blame -- path" in un non-nudo inizia repository incolpare dall'albero di lavoro, e lo stesso comando in un nudo gli errori repository fuori perché non c'è albero di lavoro per definizione.
Il comando è stato insegnato a cominciare invece incolpare dal commettere alla testa, che è più utile.

commettere a544fb0 (7 Aprile 2019) di Szeder Gábor (szeder)
(fusa per Junio ??Hamano C - gitster - in commettere d8620d3 25 apr 2019)

  

blame: predefinito a testa in un repo nuda quando nessun co inizioMMIT è data      

Quando 'git blame' viene invocato senza specificare il commit per iniziare   incolpando da, si riparte dallo stato del file specificato nella struttura di lavoro.
  Tuttavia, quando viene richiamato in un repository nudo senza un inizio commit,   allora non c'è stato di albero di lavoro da cui partire, e muore con la   seguente messaggio di errore:

$ git rev-parse --is-bare-repository
true
$ git blame file.c
fatal: this operation must be run in a work tree
     

Questa è fuorviante, perché implica che 'git blame' non lavoro   nei repository nudi a tutti, ma lo fa, infatti, funzionano bene quando   si è dato un commit da cui partire.

     

Si potrebbe migliorare il messaggio di errore, naturalmente, ma facciamo solo di default a testa in un repository nuda, invece, come più probabile che è ciò che l'utente ha voluto in ogni caso (se volevano iniziare da un altro commit, allora avrebbero precisato che, in primo luogo).

     

'git annotate' è solo un sottile wrapper 'git blame', così nel   stessa situazione è stampato lo stesso messaggio di errore fuorviante, e questo   patch risolve, anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top