2012-06-22 14 views
5

La mia azienda sta modificando il nostro strumento di controllo della versione da Rational ClearCase a Git. Abbiamo il seguente scenario di sviluppo e siamo curiosi di sapere se esiste un modello appropriato da seguire con Git per ottenere lo stesso comportamento che abbiamo in ClearCase.Qual è l'equivalente in Git a un componente di sola lettura in ClearCase?

Ecco alcuni punti fondamentali per la nostra situazione:

  1. Abbiamo un certo numero di applicazioni discrete. Chiamiamo questi AppA, AppB e AppC.
  2. Abbiamo anche alcuni file (script di compilazione, ecc.) Comuni a tutti i progetti. Chiamiamo questo Strumenti.
  3. Per ogni taglio del codice AppA, AppB o AppC, è necessario un taglio specifico del codice Strumenti.
  4. La maggior parte dei nostri sviluppatori non modifica mai il codice degli strumenti.

Per ClearCase, Abbiamo modellato questo come questo:

Componenti: app_a, app_b, app_c, strumenti

Progetti: AppA, AppB, APPC, Strumenti

Project AppA include app_a come componente di lettura/scrittura e strumenti come componente di sola lettura.

Project AppB include app_b come componente di lettura/scrittura e strumenti come componente di sola lettura.

Project AppC include app_c come componente di lettura/scrittura e strumenti come componente di sola lettura.

Gli strumenti di progetto includono strumenti come componente di lettura/scrittura.

Ogni linea di base per i progetti App * fa riferimento a una baseline sia sui comp_app di app_ * che di strumenti. Quando gli sviluppatori rebase alla linea di base consigliata, inseriscono le modifiche da entrambi i componenti.

Per Git, riteniamo che i sottomoduli potrebbero essere la cosa più vicina alla risposta giusta. Tuttavia, quando si esegue il pull/rebasing di un repository, sembra che sia necessario un ulteriore passaggio per aggiornare il codice del sottomodulo. Idealmente, vorremmo essere trasparenti. Inoltre, non ci interessa necessariamente sapere cosa è cambiato in un sottomodulo dal punto di vista del repository principale; ci interessa solo un momento per l'intero sottomodulo.

risposta

4

Innanzitutto, assicurarsi di comprendere la differenza tra una configurazione (simile a UCM) in ClearCase e git (consultare "Flexible vs static branching (GIT vs Clearcase/Accurev)").
Quando si guarda allo differences between ClearCase and Git, ciascun componente UCM deve essere rappresentato in Git come repository.

I sottomoduli richiedono un passaggio aggiuntivo se modificato, come descritto in "true nature of submodules".
Ma registrano uno SHA1 specifico, che è ciò che si desidera quando si sta tirando "APP".
gitslave consentirebbe di mantenere Tools più strettamente collegato con 'Appx', ma non credo che si adatta allo scenario.

noti che utilizzano moduli saranno:

  • make 'Tools' una sotto-directory di 'APPx'
  • renderlo modificabile.
    Non esiste un componente "di sola lettura" con git: se è possibile accedere al repository, è possibile premere/tirare.
    Se è davvero necessario imporre un accesso in lettura, è necessario aggiungere un ulteriore "livello di autorizzazione", denominato gitolite.