Organizzazione di progetti in SVN

1

Sono abbastanza nuovo per SVN e sarei interessato a sapere come altre persone organizzerebbero progetti in SVN.

Abbiamo progetti che hanno diversi tipi di file sorgente: C #, SQL e Matlab. Oltre a questi tipi di file, abbiamo report di file Excel e Word che non intendiamo inserire in SVN.

Quindi diciamo che abbiamo una directory di progetti:

Projects\
Projects\Project1
Projects\Project2
...

Ora per il repository SVN, avrebbe senso categorizzare le cose per tipo di file sorgente (C #, SQL, Matlab), quindi progetto:

SVN\C#\Project1
SVN\C#\Project2
SVN\SQL\Project1
SVN\SQL\Project2
SVN\Matlab\Project1
SVN\Matlab\Project2

O avrebbe più senso categorizzare le cose per progetto prima del tipo di file sorgente:

SVN\Project1\C#
SVN\Project1\SQL
SVN\Project1\Matlab
SVN\Project2\C#
SVN\Project2\SQL
SVN\Project2\Matlab

O forse c'è un modo migliore per farlo?

Inoltre, qual è il modo migliore per indicare nelle cartelle Progetti (non SVN) che un progetto contiene file salvati in SVN? Ad esempio, se sono entrato in una cartella di progetto per Progetto1 (Progetti \ Progetto1) e ho visto solo report Excel e Word, quale sarebbe il modo migliore per indicare che ci sono altri file controllati in un repository SVN?

Inoltre, come si sentono tutti a mettere i file SVN estratti su dischi condivisi? Ad esempio, supponiamo che Projects \ Project1 contenga i seguenti file:

Report1.doc
Script.sql (This is a checked out SVN files in the Projects folder, which is a shared network drive)

In questa situazione, sarebbe molto facile vedere quando ci sono file SVN usati con un progetto, ma avere il file SVN estratto su un'unità condivisa renderebbe la collaborazione molto più difficile. Gli altri fanno questo?

    
posta sooprise 03.02.2012 - 15:55
fonte

3 risposte

8

Hai tre domande lì:

  1. Ha più senso raggruppare per progetto, cioè svn\project1\whatever , poiché "progetto" è la categoria più significativa. Perché dovresti raggruppare progetti completamente indipendenti solo perché sono implementati in C #?
  2. Non sono sicuro di aver capito la tua seconda domanda. Con SVN, i file nella tua copia di lavoro possono avere diversi stati possibili: archiviati, sporchi (ovvero hai modifiche locali non salvate), ignorati (cioè file locali non gestiti dal repository), ecc. Utilizza un'interfaccia utente come TortoiseSVN (se stai usando Windows) e ti mostrerà lo" stato "di ogni file. Oppure puoi usare anche la riga di comando, ma è meno user-friendly.
  3. "Inoltre, come si sentono tutti a proposito di mettere i file SVN estratti su dischi condivisi?" Questa domanda mi fa pensare che non si capisca completamente lo scopo dell'utilizzo di uno strumento di gestione delle versioni di origine come SVN. Lo scopo del check-out dei file è che tu abbia una copia locale con cui lavorare. Se condividi questa copia, specialmente se fornisci l'accesso in scrittura ad essa, stai già battendo parte dello scopo dell'utilizzo di SVN per iniziare!

Si noti che SVN non può gestire con garbo i conflitti nei report XLS e DOC, perché sono file binari (si otterrà un conflitto se due persone tentano di modificare e impegnare lo stesso file). Unisci / diff in SVN è pensato per i file di testo, come il codice sorgente, non per i binari. Un modo per risolvere questo problema è bloccare i binari per la modifica. Questo può essere fatto usando il comando svn lock (o il corrispondente opzione da un'interfaccia utente come TortoiseSVN).

Potresti voler leggere una spiegazione di quando è necessario il blocco . È relativamente facile da capire.

    
risposta data 03.02.2012 - 16:09
fonte
0

Qual è il vantaggio di separare i file di origine in base alla lingua? Perché mettere tutte le risorse (codice, immagini, file di configurazione, ecc.) Nella stessa directory del progetto? Rimanerei con il layout SVN convenzionale e ho sottodirectory per trunk, rami e tag:

Projects\
    Project1\
        trunk\
        branches\
        tags\
    Project2\
        trunk\
        branches\
        tags\
    ...

All'interno di una directory di progetto come trunk, avrai tutti i file necessari per costruire il progetto. Se ha senso dividerli in sottodirectory, fallo, ma assicurati che ci sia qualche vantaggio per l'organizzazione. Ad esempio, potresti avere una directory per la grafica in modo da consentire al tuo team grafico di accedere a quei file ma non al codice sorgente, e i tuoi programmatori possono accedere al codice sorgente ma non possono cambiare la grafica. Oppure, potrebbe semplicemente semplificare la copia di tutti i file di immagine nel punto giusto del prodotto durante il processo di creazione. Se ha senso separare i file in base alla lingua, non c'è nulla di sbagliato nel farlo. Basta sapere perché lo stai facendo.

Dai un'occhiata a Controllo versione con Subversion per una grande quantità di informazioni utili. Ad esempio, c'è un capitolo sull'amministrazione di un repository che inizia considerando repository organization .

    
risposta data 03.02.2012 - 16:28
fonte
-1

Sai, in SVN le cartelle più popolari per "cose" sono trunk, rami, tag .

Ora, come scegliere che tipo di "cose" utilizzare per lo schema sopra?

Il mio modo preferito per organizzare la struttura SVN può essere chiamato "versioning driven". Non che sia particolarmente "mio" modo, solo uno suggerito da colleghi più esperti. Comunque è uno che ha dimostrato di funzionare meglio per me.

Basato su versioning significa che le cose sono definite dalla convenienza di avere una sequenza di versioni dedicate per cose di questo tipo, come la versione 1.0, 2.0, 3.1 ecc. qualsiasi cosa tu voglia essere "all'interno" di quella sequenza di versioni, rende SVN singolo "cosa". Tutto ciò che troveresti conveniente da rilasciare con diversi "stream di versione" si rivolge a diverse "cose" SVN.

- This product release is composed from component1 version 1.23, component2 version 4.56 and component3 version 7.98. where can I get code for component1 used in this release?
- Code for component1 v1.23 is in SVN folder component1/tags/1.23

- There was patch 666 we did for component2 version 4.3.1 two years ago. Where I can get its code? I am particularly interested in releases 1.0 and 2.0
- That's easy. You can find patch code in SVN folder component2/branches/4.3.1.666 and releases in component2/tags/4.3.1.666.1.0, component2/tags/4.3.1.666.2.0

Come vedi, sopra non ha praticamente nulla da fare né con il progetto né con il tipo di file sorgente.

  • Se ho bisogno di dire particolari "mix" C #, SQL, Matlab da rilasciare / versione nel suo insieme (componente 1 ver 1.0, 2.0, ...), questi andrebbero all'interno di una "cosa" - avendo lo stesso tronco, tag, rami.

  • Se ho bisogno di un po 'di file C # da rilasciare / versionare separatamente da un altro gruppo di file C # (componente2 versione 4.56 e componente3 versione 7.98), questi andrebbero a separare "cose", ognuna con sottolivelli dedicati cartelle trunk, tag, rami.

Per quanto riguarda i progetti, le cartelle SVN per queste sono, di nuovo, guidate dalla versione. Se riesco a pensare alle versioni 1.0, 2.0, ecc del progetto, per me significa la necessità della propria "cosa" SVN - propria cartella "nome-progetto" con trunk, tag, sottocartelle di rami all'interno.

    
risposta data 03.02.2012 - 20:38
fonte

Leggi altre domande sui tag