Quale sistema di controllo versione può gestire tutti gli aspetti? [chiuso]


17

Qualche mese fa ho scavato in Subversion e GIT e sono rimasto deluso. Gestiscono bene il CODICE SORGENTE ma non altri aspetti. Ad esempio, un sito Web sotto controllo versione deve gestire la proprietà di file / directory, accesso in lettura e scrittura a file / directory, elenchi di controllo di accesso, timestamp, contenuto del database. e collegamenti esterni. Esiste un sistema di controllo della versione in grado di eseguire un'inversione perfetta come ricaricare da un backup di un mese?


12
Sembra invece che tu voglia un sistema di backup?
Macke,

2
Hai mai pensato di eseguire il tuo sito Web su OS X su un Mac? Time Machine è forse la soluzione di backup più semplice attualmente disponibile e rende molto semplice il rollback, se necessario.

1
Se sei seriamente interessato all'argomento, dovresti dare un'occhiata alla ricerca nei file system di versione e nei database di versione, che vanno oltre i sistemi di controllo della versione per il codice sorgente.
Jakob,

cosa c'è di sbagliato nello scrivere un po 'di script per gestire cose che la scm non gestisce? in questo modo ottieni quello che vuoi e lo ottieni sotto il controllo del codice sorgente.
Newtopiano,

Risposte:


44

Sei confuso sul ruolo di un sistema di controllo della versione. Non è e non è mai stato pensato per essere un sistema di backup per un sito Web in esecuzione. Fa un ottimo lavoro nella gestione del contenuto statico in modo che sia passato alla produzione in modo controllato. Con l'uso corretto della codifica e dei checkout automatici, anche i siti in rapido cambiamento possono essere conservati in un sistema di controllo della versione.

Un sistema di controllo della versione sarà in grado di dirti come sei passato dall'aspetto del sito il mese scorso a come appare oggi (almeno per quei componenti che sono sotto il controllo del codice sorgente). Dovrebbe includere tutto il necessario per ricostruire il sito Web (esclusi i contenuti dinamici). Come altri hanno già notato, qualsiasi modifica alle autorizzazioni e alla proprietà deve essere gestita da script e tale script deve essere incluso nel controllo della versione.

Le autorizzazioni di accesso per i siti Web sono in genere abbastanza semplici. (Fondamentalmente, è necessario assicurarsi che il server web possa leggere tutto il contenuto e scriverne pochissimo.) Ad eccezione della proprietà della directory delle poche directory che devono essere scrivibili dalla sovversione del web server, e possibilmente git, può sicuramente gestire le autorizzazioni. Le directory che sono scrivibili dal server Web in genere contengono contenuto dinamico (creato e aggiornato dal sito Web), che viene gestito separatamente dall'origine dei siti Web.

Se mi chiedessero di lavorare con un sito Web con autorizzazioni e ACL complicati sul tuo sito Web, avrei serie preoccupazioni sul processo utilizzato per gestire il sito Web. L'implementazione di un sistema di controllo della versione e il trasferimento degli ACL su di esso sarebbe una delle soluzioni che prenderei seriamente in considerazione.

Il contenuto dinamico, come post di blog o commenti, è in genere contenuto in un database o altro archivio dati anziché nel controllo versione utilizzato per creare il sito. L'archivio dati può essere organizzato per fornire il controllo della versione del suo contenuto (come è questo software). Molti Wiki utilizzano un sistema di controllo della versione per tenere traccia delle revisioni.

MODIFICARE:

La correzione che sto usando è (a) Nessun controllo di versione, (b) Il sito di produzione è il sito principale, (c) Archivia ogni volta che cambia qualcosa, (d) Lo script di archivio rimuove la spazzatura come ACL, e (e) lo script di installazione corregge altre autorizzazioni come file spazzatura.

Questi problemi possono essere gestiti importando il sito in un sistema di controllo della versione e modificando il processo in modo che il sito principale venga aggiornato attraverso quel sistema. (a), (b) e (c) sono gestiti direttamente dal controllo versione. Potresti voler taggare i rilasci per far funzionare meglio (c). (d) generalmente non è un problema se il sistema di distribuzione cambia solo il tuo sito. Non ho mai avuto bisogno di ACL sul contenuto del sito.

(e) dovrebbe essere eseguito solo sulla creazione iniziale e su importanti cambiamenti. Potrebbe anche includere lo script che aggiorna il sito dal controllo versione e viene eseguito frequentemente. Questi script tendono ad essere abbastanza semplici quando si mantiene il sito nel sistema di controllo dell'avversione.

Ma perché nessuno ha creato un sistema generale per farlo?

Perché non è necessario se si utilizza un sistema di controllo della versione.

Un sistema di controllo della versione POTREBBE tenere traccia di tutto questo, ma nessuno lo fa.

Sia CVS che Subversion tengono traccia di ciò che è necessario tracciare se li si utilizza. Non tracciano ciò che è necessario tracciare perché non si utilizza un sistema di controllo della versione, né dovrebbero. Tiene traccia di ciò che devi tenere traccia quando stai usando un sistema di controllo della versione.

Ho lavorato con diversi siti che hanno gestito i loro contenuti utilizzando il controllo versione. Tutti avevano requisiti diversi per i siti di gestione temporanea, la frequenza di distribuzione e la completezza degli aggiornamenti. Una volta che i siti avevano il controllo della versione che soddisfaceva il resto dei requisiti era relativamente facile da soddisfare. La documentazione sia per CVS che per Subversion fornisce suggerimenti per possibili metodi di aggiornamento.

Potresti aver bisogno di ACL per limitare l'accesso a particolari aree all'interno del contenuto controllato dalla versione. Tuttavia, tendo a lavorare su una base di fiducia. Il controllo della versione rende facile vedere chi ha fatto cosa quando. Se non riformatti i file, è facile ottenere una cronologia annotata di un file che mostra chi ha aggiunto quali righe quando.


+1 per capire i motivi per cui la domanda è sbagliata dall'inizio.
Macke,

2
+1 Tuttavia, è positivo che la domanda sia stata posta in modo che gli altri possano beneficiare della tua risposta.
Oliver-Clare,

Un sistema di controllo di versione dovrebbe darmi la possibilità di dire "OK, su questo altro computer qui, costruiscimi il sito dal 28 luglio". Il controllo della versione è più efficiente dei backup perché tiene traccia delle modifiche. Altrimenti, sì, un backup giornaliero farebbe il lavoro OK.
Andy Canfield,

Sì, la correzione che sto usando è (a) Nessun controllo di versione, (b) Il sito di produzione è il sito principale, (c) Archivia ogni volta che cambia qualcosa, (d) Lo script di archivio rimuove la spazzatura come ACL e ( e) lo script di installazione corregge altri permessi come file spazzatura. Ma perché nessuno ha creato un sistema generale per farlo? Un sistema di controllo della versione POTREBBE tenere traccia di tutto questo, ma nessuno lo fa.
Andy Canfield,

+1: ottima risposta. Vorrei tuttavia aggiungere che nessun sistema di controllo della versione tiene traccia di queste cose perché NON POTREBBERO. Le autorizzazioni e i nomi utente sono specifici dell'host e il loro formato è specifico del sistema; non è possibile che lo strumento li porti automaticamente su host diversi, soprattutto quando si tratta di un sistema operativo diverso.
Jan Hudec,

10

Tutti loro e nessuno di loro.

È una cattiva idea ottenere il controllo del codice sorgente per gestire direttamente quei dettagli, nel modo in cui la tua domanda è intima.

Tuttavia, è possibile scrivere uno script bash (* nix) o uno script PowerShell (Windows), che raggiunge uno o tutti questi obiettivi. Questo script potrebbe essere archiviato nel controllo del codice sorgente.

Quindi puoi rendere quello script uno dei tuoi manufatti di build ed eseguirlo come parte della tua distribuzione.


Questo. L'idea di avere delle fonti è che puoi estrarle dal tuo VCS e usarle per costruire il prodotto finito.
Blrfl,

2

IMHO un sistema di controllo della versione in sé non deve essere utilizzato in questo modo.

Ma quello che tendo a fare è assicurarmi di poter ottenere una versione dal controllo del codice sorgente, devi solo eseguire un file di build / file PowerShell e tutto è di nuovo funzionante.

Per questo è necessario:

  • tutte le librerie da cui dipende l'app nel controllo del codice sorgente
  • un file di build che imposta il tuo ambiente
  • un'istruzione sui requisiti del tuo ambiente (non vuoi mettere l'installazione di un server sql nel tuo controllo del codice sorgente)

1

Credo che ciò di cui hai bisogno nel tuo caso sia uno strumento di gestione della configurazione . Quello che ho usato è il burattino .

Ti sto citando:

gestire la proprietà di file / directory, accesso in lettura e scrittura a file / directory,

L'ho fatto con una sola riga (assicurati che l'utente esista, assicuri che la directory esista, ecc.) ...

Elenchi di controllo degli accessi,

Se si tratta di ACL di Windows, esistono strumenti CM specifici per Windows ...

timestamp,

di nuovo il comando touch unix in una riga in uno script fantoccio potrebbe fare questo per te.

contenuto del database.

È costruito in molti framework, un cron job che assicura che tutto sia altrimenti?

e collegamenti esterni.

Non ne so nulla.

Naturalmente dopo aver scritto il codice di gestione della configurazione, potresti volerlo inserire (o recuperarlo nei sistemi interessati) su un sistema di controllo della versione. Non ti allontanerai da quelli :-).


Non capisco cosa intendi con "timestamps: di nuovo un comando unix in una riga in uno script fantoccio potrebbe fare questo". Sul mio sito, per ottenere la versione del sito, esegue la scansione dell'intero sitetree e restituisce la data e l'ora del file più recente. Voglio che il controllo della versione "Checkout" dia ai file lo stesso timestamp che avevano al momento del checkin, non impostato come 'now'. Come si fa in un comando unix?
Andy Canfield,

ovviamente, stai cercando "touch", controlla questo: en.wikipedia.org/wiki/Touch_(Unix) . Generalmente al momento del check-out verrà applicato il momento, ma se per qualche motivo si desidera un timestamp diverso, questo è come farlo.
Dimitrios Mistriotis,

In realtà mi è piaciuta la logica della tua domanda, vuoi automatizzare il più possibile, che è il "modo giusto", hai bisogno di un po 'di conoscenza su come farlo e cosa va su VControl e cosa no. Vorrei che più persone del nostro settore pensassero allo stesso modo ...
Dimitrios Mistriotis,

0

Esiste un sistema di controllo della versione definitiva che gestisce tutti gli aspetti di tutti i documenti digitali. Si chiama Xanadu ed è stato creato da Theodor Holm Nelson nel 1960, anche prima che cose come i file system fossero comuni. Quindi in teoria tutto è perfettamente risolto. In pratica, Xanadu non è mai stato implementato come previsto da Nelson, ma ha ispirato molti sistemi più specializzati, tra cui il Web e i sistemi di controllo delle versioni. Le opere di Nelson meritano ancora una nuova lettura e possono rispondere alla domanda sul perché non esiste un VCS generale che gestisca tutti gli aspetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.