Sto lavorando a un progetto in cui le persone sono in grado di inviare storie e hanno altre persone che contribuiscono. Piuttosto che semplicemente modificare una voce nel database, vorrei memorizzare le modifiche apportate dalle persone piuttosto che l'intero nuovo set di modifiche. Quindi posso applicare in modo dinamico diffs se le persone vogliono tornare a una versione precedente. Posso anche presentare facilmente agli utenti che sono gli editor con solo il testo modificato in modo che possano saltare direttamente alle modifiche.Come posso diff e patch/unire stringhe invece di file?
Sono a conoscenza di come trasferire file diff e applicare patch ad altri file. Ma sto realizzando un'app web con Python e Django, e conserverò tutte queste differenze in un database MySQL. Dato che le prestazioni non sono un problema importante per questa app, sono pronto a estrarre i dati dal DB, creare file ed eseguire git diff
e patch
su quei file.
C'è un modo migliore di creare nuovi file e cancellarli ogni volta che voglio creare una nuova versione o applicare una nuova diff? C'è un modo per eseguire diff su testo semplice invece di file? Per esempio. impostando le variabili in bash come contenuto di (quale sarebbe) un file (ma in realtà sono dati dal DB) ed eseguendo git diff
su di esse? Mi piacerebbe controllare queste azioni da un file Python dopo che l'utente ha inviato un modulo.
Sto solo cercando un buon modo per iniziare questo problema, quindi qualsiasi aiuto sarebbe molto apprezzato.
Grazie per il vostro tempo,
ParagonRG
si può certamente applicare i principi della memorizzazione diff invece che il testo completo nel database, ma è un po 'strano che ci si vuole usare un VCS per lo scopo. .. (hai guardato http://docs.python.org/library/difflib.html)? – geoffspear
Grazie, esaminando questo ora! – Paragon
Sfortunatamente difflib non ha permesso di ricostruire il testo da diff a meno che non si utilizzi diff che memorizzino l'interezza del testo e le sue modifiche. Ho quindi creato un modulo per farlo; per favore vedi la mia risposta qui sotto. – Paragon