Domande sulla pianificazione dei repository Git
Domanda
Al lavoro, lo sviluppo utilizza perforce per gestire la condivisione del codice.Non dirò "controllo di revisione", perché non ci è consentito archiviare le modifiche finché non sono pronte per i test di regressione.Per mettere i miei set di modifiche personali sotto controllo di revisione, mi è stato dato il via libera per costruire il mio git e inizializzare la vista client del depot perforce come repository git.
Ci sono però alcune difficoltà nel farlo.
La vista del client si trova in una sottocartella di
~
, (~/p4
), e voglio mettere~
anch'esso sotto controllo di revisione, con una propria storia separata.Non riesco a capire come conservare la cronologia per~
separato da~/p4
senza utilizzare un sottomodulo.Il problema con un sottomodulo è che sembra che debba creare un repository che diventerà il sottomodulo e poigit submodule add <repo> <path>
.Ma non c'è nessun posto dove creare il repository del sottomodulo se non in~
.Sembra che non ci sia un posto sicuro per creare la vista client iniziale del depot con git p4 clone.(Sto partendo dal presupposto che l'avvio o la clonazione di un repository in una sottodirectory di un repository git non sia supportato.Almeno, non riesco a trovare nulla di autorevole sui repository git nidificati.)
modificare: Sta semplicemente ignorando
~/p4
nel repository radicato in~
abbastanza per permettermi di inizializzare un repository annidato~/p4
?La mia funzione __git_ps1 pensa ancora che io sia in un repository git quando visito una sottodirectory ignorata di un repository git, quindi sono propenso a pensare di no.Ho bisogno che il repository "remoto" creato da git p4 sync sia un ramo in ~/p4.Siamo tenuti a conservare tutto il nostro codice in ~/p4 in modo che non venga eseguito il backup.Posso effettuare il prelievo da una filiale "remota" che in realtà è una filiale locale?
Questo è solo per comodità, ma ho pensato che avrei potuto imparare qualcosa chiedendolo.Per il 99% del progetto, voglio solo iniziare con la revisione head p4 come oggetto di commit iniziale.Per il restante 1%, vorrei risucchiare l'intera cronologia di p4 in modo da poterla sfogliare in git.IOW, dopo aver finito di inizializzarlo, il commit iniziale di remotes/p4/master branch conterrà:
revision 1 of //depot/prod/Foo/Bar/* revision X of other files in //depot/prod/*, where X is the head revision
e il
remotes/p4/master
branch contiene Y commit, dove Y è il numero di elenchi di modifiche in cui era presente un file//depot/prod/Foo/Bar/*
, con ogni commit nella cronologia corrispondente a uno di quegli elenchi di modifiche p4 e HEAD che assomiglia alla testa di p4.
Modificare:la risposta di Meagar non ha funzionato del tutto per me.
Ho inizializzato ~ e ho effettuato il check-in di alcuni commit.Ho ignorato ~/p4 e ~/p4 non è in nessun oggetto commit.=:
[~@ernie02] (master) $ git show HEAD:p4
fatal: Path 'p4' exists on disk, but not in 'HEAD'.
Poi sono andato su ~/p4/prod, un ramo che voglio controllare.Ma questo repository è rotto:
[~/p4/prod@ernie02] (master) $ git log
(shows the log for the repo rooted at ~)
[~/p4/prod@ernie02] (master) $ git init
Initialized empty Git repository in ~/p4/prod/.git/
[~/p4/prod@ernie02] (master) $ git log
fatal: bad default revision 'HEAD'
Modifica modifica:Ops, ho dimenticato di impegnarmi in qualcosa ~/p4/prod
.Sto provando un git p4 sync //depot/prod adesso...
Soluzione
In risposta al punto 1, se vuoi davvero avere l'intera directory home in un repository git, ma hai ~/p4 in un repository separato, aggiungi semplicemente "p4" a .git_ignore
nella tua directory home e crea un altro repository in p4:
$ cd ~
$ git init
$ echo "p4" > .git_ignore
$ git add .git_ignore
# add all files/directories except p4
$ git commit
$ cd p4
$ git init
$ git add .
$ git commit
Non seguo esattamente il punto 2, ma sì, puoi estrarre da un repository "remoto" locale nel tuo file system.Per quanto riguarda il "tirare" dalle filiali locali, questo non è tirare;l'estrazione implica un recupero e una fusione.Se ometti il recupero, è solo una fusione, quindi stai davvero parlando di fusione da un ramo locale.