A livello di codice dire la differenza tra i repository git-svn e git?
-
03-07-2019 - |
Domanda
Ho impostato alcune cose della shell che definiscono in modo dinamico gli alias in base al tipo di repository VC contenuto nel CWD, quindi, ad esempio, "d" esegue "svn diff" o "git diff", a seconda. (Basato su questo post sul blog , se qualcuno è interessato ...)
Vorrei definire alcuni alias in modo diverso a seconda che io sia in un repository git rispetto a un repository git-svn. C'è un modo semplice per dire la differenza tra i due?
Soluzione
Dovresti stare un po 'attento quando decidi quali repository sono esattamente repository git-svn. Un repository può contenere più di un repository svn.
La soluzione di Kafka funzionerà solo se il repository svn è stato clonato con l'opzione -s o --std-layout, in cui in realtà è un ramo trunk
.
La risposta di Codelogic funzionerà solo se esiste un repository svn chiamato svn
- non è necessario che sia vero.
Il modo più semplice per verificare se è un svn-remote nella configurazione è:
$ git config --get-regexp ^svn-remote
Questo troverà qualsiasi repository git-svn configurato, qualunque sia il loro nome. Uscirà con lo stato 0 se c'è una corrispondenza e 1 se non c'è una corrispondenza.
Ma questo non significa che il repository svn sia veramente usato. Potrebbe anche essere che qualcuno abbia importato un repository svn, ma che usi sia come sottomodulo o come unione di sotto-alberi, o addirittura per niente. Se i metadati nel repository git-svn sono stati attivati, puoi vedere se è stata usata una revisione svn nell'attuale HEAD usando qualcosa del genere:
$ git rev-list -1 --grep='git-svn-id' HEAD
Ma forse è un po 'troppo contorto. Decidi tu.
Altri suggerimenti
Probabilmente puoi usare l'output del comando git config
per distinguere tra un repository git e git-svn.
git config --get svn-remote.svn.url
dovrebbe restituire l'URL svn in fase di sincronizzazione, se ce n'è uno.
C'è anche un ramo chiamato trunk e un ramo chiamato trunk @ [REV]. Tuttavia, penso che l'approccio di codelogics sia più semplice e più pulito.