Condivisione solo parte del codice con git

4

La situazione

Ho un codice con caratteristiche X e Y.

Bob ha bisogno di accedere al codice per aiutare a sviluppare ulteriormente la funzione X.

Normalmente consentirei a Bob di clonare il codice, ma il problema è che la caratteristica Y è riservata, quindi non è possibile. Bob non deve essere in grado di visualizzare il codice Y della funzione per sviluppare ulteriormente la funzione X.

Se creo un nuovo ramo da condividere con Bob ed elimini la funzione Y dal codice, esso sarà comunque visualizzabile nella cronologia del commit.

Quindi immagino che l'unica opzione sia:

  1. Crea un nuovo ramo ed elimina la funzione Y.
  2. Crea un repository completamente nuovo da condividere con Bob
  3. Copia i file (mentre il nuovo ramo Y-less viene estratto) nel nuovo repository.
  4. Dai accesso a Bob a quel nuovo repository.
  5. Dopo che Bob ha sviluppato ulteriormente la funzione X, seleziona i file e le righe pertinenti e inseriscili nel mio master. (Dolorosa)

Domanda

C'è un modo migliore per farlo?

    
posta Gerhard 05.12.2013 - 05:55
fonte

2 risposte

7

Uno sforzo non minore, ma una soluzione più permanente sarebbe quella di dividere le feature X e Y ciascuna nei propri repository. Quindi il master si limiterebbe a fare riferimento agli altri repository come librerie (la migliore pratica è usare i sottomoduli).

In questo modo non è necessario aggiungere manualmente il nuovo sviluppo alla feature X mentre la si utilizza direttamente dal proprio repository.

    
risposta data 05.12.2013 - 06:40
fonte
3

Come diceva Tristan, se possibile, suddividere le caratteristiche nei propri repository è la migliore pratica possibile. Tuttavia, ci sono alternative se il codice è troppo intrecciato.

Uno è utilizzare MOE , che è un programma che automatizza fondamentalmente la traduzione di un repository tra una versione open source e una versione closed source.

Un'altra opzione è creare un ramo Bob , quindi copiare le parti che vuoi inviare a lui. Quando ti manda le modifiche, controlla quel ramo e copia tutti i suoi file. Quindi è una semplice fusione nel tuo ramo principale. Ho usato questo metodo quando le modifiche erano in un VCS diverso.

    
risposta data 05.12.2013 - 14:59
fonte

Leggi altre domande sui tag