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.

  1. 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 poi git 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.

  2. 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?

  3. 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...

È stato utile?

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.

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