Copyright © 2002, 2003, 2004, 2005, 2006 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato
This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit http://creativecommons.org/licenses/by/2.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Questo lavoro è rilasciato sotto la licenza Creative Commons Attribution. Per vedere una copia di questa licenza consultare il sito http://creativecommons.org/licenses/by/2.0/ od inviare una lettera a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
(TBA)
Sommario
Lista delle Figure
Lista delle Tabelle
Lista degli Esempi
.svn/entriesA bad Frequently Asked Questions (FAQ) sheet is one that is composed not of the questions people actually asked, but of the questions the FAQ's author wished people had asked. Perhaps you've seen the type before:
Una pagina scadente delle domande frequenti (Frequently Asked Questions-FAQ) è quella composta non dalle domande che la gente veramente pone, ma da domande che l'autore di quella FAQ avrebbe voluto che fossero state poste. Forse avete già incontrato cose di questo tipo:
Q: How can I use Glorbosoft XYZ to maximize team productivity?
D: Come posso usare Glorbosoft XYZ per massimizzare la produttività del gruppo?
A: Many of our customers want to know how they can maximize productivity through our patented office groupware innovations. The answer is simple: first, click on the “
File” menu, scroll down to “Increase Productivity”, then…R: Molti dei nostri clienti vogliono sapere come possono massimizzare la produttività attraverso le nostre innovazioni brevettate di software collaborativo per ufficio. La risposta è semplice: prima cliccare sul menù «
File», scorrere giù fino ad «Aumentare produttività», poi…
The problem with such FAQs is that they are not, in a literal sense, FAQs at all. No one ever called the tech support line and asked, “How can we maximize productivity?”. Rather, people asked highly specific questions, like, “How can we change the calendaring system to send reminders two days in advance instead of one?” and so on. But it's a lot easier to make up imaginary Frequently Asked Questions than it is to discover the real ones. Compiling a true FAQ sheet requires a sustained, organized effort: over the lifetime of the software, incoming questions must be tracked, responses monitored, and all gathered into a coherent, searchable whole that reflects the collective experience of users in the wild. It calls for the patient, observant attitude of a field naturalist. No grand hypothesizing, no visionary pronouncements here—open eyes and accurate note-taking are what's needed most.
Il problema di queste FAQ è che non sono, in senso letterale, per nulla FAQ. Nessuno ha mai chiamato il supporto tecnico per chiedere: «Come possiamo massimizzare la produttività?». La gente, piuttosto, pone domande molto specifiche, tipo: «Come possiamo cambiare il sistema di calendario per spedire i promemoria con anticipo di due giorni invece di uno?» e via dicendo. Ma è molto più semplice costruire FAQ immaginarie che elaborarne una reale. Compilare una vera pagina delle FAQ richiede uno sforzo continuo ed organizzato: durante il ciclo di vita del software le domande pervenute devono essere tracciate, le risposte monitorate e tutto deve essere messo insieme in un modo coerente e consultabile, che rifletta l'esperienza collettiva di tutti gli utenti. È richiesta l'attitudine all'osservazione paziente propria di un naturalista. Non grandi ipotesi, non dichiarazioni visionarie—occhi aperti ed un accurato prender nota, è tutto quel che serve.
What I love about this book is that it grew out of just such a process, and shows it on every page. It is the direct result of the authors' encounters with users. It began with Ben Collins-Sussman's observation that people were asking the same basic questions over and over on the Subversion mailing lists: What are the standard workflows to use with Subversion? Do branches and tags work the same way as in other version control systems? How can I find out who made a particular change?
Quel che amo di questo libro è il fatto che sia cresciuto proprio da un processo di questo tipo e lo mostra in ogni pagina. Esso è il risultato diretto dell'incontro tra gli autori e gli utenti. È cominciato dall'osservazione di Ben Collins-Sussman che le persone ponevano sempre le stesse domande base nelle mailing list di Subversion: Quali sono i flussi di lavoro standard da usare con Subversion? Branch e tag funzionano come negli altri sistemi per il controllo di versione? Come posso scoprire chi ha fatto una particolare modifica?
Frustrated at seeing the same questions day after day, Ben worked intensely over a month in the summer of 2002 to write The Subversion Handbook, a sixty page manual that covered all the basics of using Subversion. The manual made no pretense of being complete, but it was distributed with Subversion and got users over that initial hump in the learning curve. When O'Reilly and Associates decided to publish a full-length Subversion book, the path of least resistance was obvious: just expand the Subversion handbook.
Frustrato dal vedere sempre le stesse domande giorno dopo giorno, Ben ha lavorato intensamente per più di un mese nell'estate 2002 per scrivere The Subversion Handbook, manualetto di 60 pagine che copriva tutte le nozioni di base sull'uso di Subversion. Il manuale non pretendeva di essere completo, ma fu distribuito con Subversion ed ha dato agli utenti la spinta iniziale nella curva d'apprendimento. Quando O'Reilly and Associates hanno deciso di pubblicare un libro su Subversion in edizione completa, la via più facile era ovvia: semplicemente espandere Subversion handbook.
The three co-authors of the new book were thus presented with an unusual opportunity. Officially, their task was to write a book top-down, starting from a table of contents and an initial draft. But they also had access to a steady stream—indeed, an uncontrollable geyser—of bottom-up source material. Subversion was already in the hands of thousands of early adopters, and those users were giving tons of feedback, not only about Subversion, but about its existing documentation.
Ai tre co-autori del nuovo libro si è presentata un'opportunità non comune. Ufficialmente, loro compito era scrivere un libro 'top-down', cominciando dall'indice e da una bozza iniziale. Ma gli autori avevano anche accesso ad una massiccia corrente— davvero un geyser incontrollabile— di materiale originale di tipo 'bottom-up'. Subversion era già nelle mani di migliaia di utenti neofiti e questi fornivano tonnellate di feedback non solo riguardo Subversion ma anche riguardo la sua documentazione.
During the entire time they wrote this book, Ben, Mike, and Brian haunted the Subversion mailing lists and chat rooms incessantly, carefully noting the problems users were having in real-life situations. Monitoring such feedback is part of their job descriptions at CollabNet anyway, and it gave them a huge advantage when they set out to document Subversion. The book they produced is grounded firmly in the bedrock of experience, not in the shifting sands of wishful thinking; it combines the best aspects of user manual and FAQ sheet. This duality might not be noticeable on a first reading. Taken in order, front to back, the book is simply a straightforward description of a piece of software. There's the overview, the obligatory guided tour, the chapter on administrative configuration, some advanced topics, and of course a command reference and troubleshooting guide. Only when you come back to it later, seeking the solution to some specific problem, does its authenticity shine out: the telling details that can only result from encounters with the unexpected, the examples honed from genuine use cases, and most of all the sensitivity to the user's needs and the user's point of view.
Durante la stesura del libro, Ben, Mike e Brian hanno perlustrato senza sosta le mailing list e chat room di Subversion, annotando con cura quali problemi avevano gli utenti in situazioni reali. Monitorare assiduamente il feedback degli utenti è parte del loro lavoro presso CollabNet, e ciò li avvantaggiò molto quando si misero a documentare Subversion. Il libro che hanno prodotto è ancorato saldamente sulla roccia dell'esperienza, non sulle sabbie mobili dei desideri; esso combina gli aspetti migliori di un manuale per utenti e di una pagina delle FAQ. Questa dualità forse non si nota alla prima lettura. Preso in ordine, dalla prima al'ultima pagina, il libro è semplicemente una chiara descrizione di un software. Ci sono introduzione, l'obbligatoria 'visita guidata', il capitolo sulla configurazione, alcuni concetti avanzati e naturalmente, la dettagliata spiegazione delle opzioni dei comandi e la guida alla risoluzione dei problemi. Solo quando ci si torna in seguito, cercando la soluzione d'un particolare problema, salta fuori la sua autenticità: i dettagli parlanti che possono essere solo frutto di incontri con l'inaspettato, gli esempi affinati da casi d'uso genuini, e soprattutto la sensibilità ai bisogni degli utenti ed al loro punto di vista
Of course, no one can promise that this book will answer
every question you have about Subversion. Sometimes, the
precision with which it anticipates your questions will seem
eerily telepathic; yet occasionally, you will stumble into a
hole in the community's knowledge, and come away empty-handed.
When this happens, the best thing you can do is email
<users@subversion.tigris.org> and present your
problem. The authors are still there, still watching, and they
include not just the three listed on the cover, but many others
who contributed corrections and original material. From the
community's point of view, solving your problem is merely a
pleasant side effect of a much larger project—namely,
slowly adjusting this book, and ultimately Subversion itself, to
more closely match the way people actually use it. They are
eager to hear from you not merely because they can help you, but
because you can help them. With Subversion as with all active
free software projects, you are not
alone.
Certamente, nessuno può promettere che questo libro
risponderà ad ogni domanda che si possa avere riguardo Subversion.
Qualche volta, la precisione con cui anticipa le vostre domande
potrà sembrare misteriosamente telepatica; ma alle volte
ci si imbatte in una lacuna nel bagaglio di conoscenze della comunità e
si torna a mani vuote. Quando succede, la cosa migliore è
inviare una email a <users@subversion.tigris.org> ed
esporre il proprio problema. Gli autori sono ancora lì, ancora
osservano e non sono solo i tre citati sulla prima pagina,
ma molti altri che hanno contribuito con correzioni e con
nuovo materiale. Dal punto di vista della comunità, risolvere
il vostro problema è solo il piacevole effetto collaterale di un
progetto più ampio— cioè, pian piano sistemare
questo libro, e alla fine Subversion stesso, per avvicinarsi di più
al modo in cui la gente lo usa. Sono desiderosi di sentirvi non
solo perché vi possono aiutare, ma perché voi potete aiutare loro.
Con Subversion come nel caso di tutti i progetti attivi di software libero
non siete soli.
Let this book be your first companion.
Che questo libro sia il vostro primo compagno.
— , Chicago, 14 March, 2004
Sommario
«If C gives you enough rope to hang yourself, think of Subversion as a sort of rope storage facility.» «Se il C fornisce corda a sufficienza per impiccarti, pensa a Subversion come una sorta di magazzino di corde.» —Brian W. Fitzpatrick
In the world of open-source software, the Concurrent Versions System (CVS) has long been the tool of choice for version control. And rightly so. CVS itself is free software, and its non-restrictive modus operandi and support for networked operation—which allow dozens of geographically dispersed programmers to share their work—fits the collaborative nature of the open-source world very well. CVS and its semi-chaotic development model have become cornerstones of open-source culture.
Nel mondo del software open-source, Concurrent Versions System (CVS) è stato a lungo e giustamente lo strumento preferito per il controllo di versione. Lo stesso CVS è software libero ed il suo modus operandi non-restrittivo, unito al supporto per il funzionamento in rete—che permette a dozzine di programmatori sparsi per il mondo di condividere il proprio lavoro—calza perfettamente alla natura collaborativa del mondo open-source. CVS ed il suo modello di sviluppo semi-caotico sono diventati un elemento fondamentale della cultura open-source.
But like many tools, CVS is starting to show its age. Subversion is a relatively new version control system designed to be the successor to CVS. The designers set out to win the hearts of CVS users in two ways: by creating an open-source system with a design (and “look and feel”) similar to CVS, and by attempting to fix most of CVS's noticeable flaws. While the result isn't necessarily the next great evolution in version control design, Subversion is very powerful, very usable, and very flexible.
Ma come molti altri strumenti, CVS sta iniziando a mostrare la sua età. Subversion è un sistema di controllo di versione relativamente nuovo, progettato per essere il successore di CVS. I progettisti hanno mirato al cuore degli utenti CVS in due modi: creando un sistema open-source con un'architettura (ed un «look and feel») simile a CVS, e contemporaneamente provando ad eliminare la maggior parte dei difetti più evidenti di CVS. Sebbene il risultato non sia necessariamente il prossimo grande salto evolutivo dei sistemi di controllo di versione, Subversion è molto potente, usabile e flessibile.
This book is written to document the 1.2 series of the Subversion version control system. We have made every attempt to be thorough in our coverage. However, Subversion has a thriving and energetic development community, so there are already a number of features and improvements planned for future versions of Subversion that may change some of the commands and specific notes in this book.
Questo libro documenta la serie 1.2 del sistema di controllo di versione Subversion. Abbiamo cercato di essere esaustivi nella nostra analisi. Tuttavia, Subversion ha una comunità di sviluppo fiorente e piena di energie ed esiste già un nutrito numero di funzionalità e miglioramenti pianificati per le prossime versioni che potranno apportare modifiche ad alcuni dei comandi e delle annotazioni contenute in questo libro.
This book is written for computer-literate folk who want to use Subversion to manage their data. While Subversion runs on a number of different operating systems, its primary user interface is command-line based. It is that command-line tool (svn) which is discussed and used in this book. For consistency, the examples in this book assume the reader is using a Unix-like operating system, and is relatively comfortable with Unix and command-line interfaces.
Questo libro è scritto per persone con una certa dimestichezza con il computer e che vogliono utilizzare Subversion per gestire i propri dati. Nonostante Subversion sia disponibile per un certo numero di sistemi operativi, la sua interfaccia utente primaria è basata sulla riga di comando. È proprio tale tool a riga di comando (svn) ad essere discusso e usato in questo libro. Per coerenza, gli esempi di questo libro assumono che il lettore utilizzi un sistema operativo di derivazione Unix e sia relativamente a proprio agio con Unix e le interfacce a riga di comando.
That said, the svn program also runs on
non-Unix platforms like Microsoft Windows. With a few minor
exceptions, such as the use of backward slashes
(\) instead of forward slashes
(/) for path separators, the input to and
output from this tool when run on Windows are identical to its
Unix counterpart. However, Windows users may find more success
by running the examples inside the Cygwin Unix emulation
environment.
Detto questo, il programma svn funziona anche
su piattaforme non-Unix come Microsoft Windows. Con qualche piccola
eccezione, come l'uso del backslash (\) al posto
dello slash (/) come separatore di percorso,
l'input e l'output prodotti dal programma quando questo è eseguito
su Windows sono identici a quelli prodotti dalla controparte su Unix.
Tuttavia, gli utenti Windows potrebbero avere più successo eseguendo
gli esempi all'interno dell'ambiente di emulazione Unix: Cygwin.
Most readers are probably programmers or system administrators who need to track changes to source code. This is the most common use for Subversion, and therefore it is the scenario underlying all of the book's examples. But Subversion can be used to manage changes to any sort of information: images, music, databases, documentation, and so on. To Subversion, all data is just data.
La maggior parte dei lettori saranno probabilmente programmatori o amministratori di sistema che necessitano di tenere traccia delle modifiche al codice sorgente. Questo è l'uso più comune di Subversion e quindi è lo scenario utilizzato in tutti gli esempi del libro. Subversion, tuttavia, può essere utilizzato per gestire modifiche apportate a qualunque tipo di informazione: immagini, musica, database, documentazione e via dicendo. Per Subversion, i dati sono solo dati.
While this book is written with the assumption that the reader has never used version control, we've also tried to make it easy for users of CVS to make a painless leap into Subversion. Special sidebars may discuss CVS from time to time, and a special appendix summarizes most of the differences between CVS and Subversion.
Nonostante questo libro sia stato scritto presumendo che il lettore non abbia mai utilizzato un sistema di controllo di versione, abbiamo anche provato a rendere indolore la transizione di utenti CVS verso Subversion. Speciali trafiletti discuteranno CVS di tanto in tanto e un'apposita appendice fornisce un sommario delle principali differenze tra CVS e Subversion.
This book aims to be useful to people of widely different backgrounds—from people with no previous experience in version control to experienced system administrators. Depending on your own background, certain chapters may be more or less important to you. The following can be considered a “recommended reading list” for various types of readers:
Questo libro mira ad essere utile per utenti con differenti gradi di preparazione—da persone senza nessuna precedente esperienza con il controllo di versione ad amministratori di sistema esperti. A seconda del proprio background, certi capitoli potranno essere più o meno importanti. La seguente può essere considerata una «lista di letture consigliate» per i vari tipi di lettore:
The assumption here is that you've probably used CVS before, and are dying to get a Subversion server up and running ASAP. Capitolo 5, Repository Administration and Capitolo 6, Configurazione del server will show you how to create your first repository and make it available over the network. After that's done, Capitolo 3, Visita guidata and Appendice A, Subversion per utenti CVS are the fastest routes to learning the Subversion client while drawing on your CVS experience.
Your administrator has probably set up Subversion already, and you need to learn how to use the client. If you've never used a version control system (like CVS), then Capitolo 2, Concetti base and Capitolo 3, Visita guidata are a vital introduction. If you're already an old hand at CVS, chapter 3 and appendix A are the best place to start.
Whether you're a user or administrator, eventually your project will grow larger. You're going to want to learn how to do more advanced things with Subversion, such as how to use branches and perform merges (Capitolo 4, Ramificazioni e fusioni), how to use Subversion's property support, how to configure runtime options (Capitolo 7, Temi avanzati), and other things. These two chapters aren't vital at first, but be sure to read them once you're comfortable with the basics.
Presumably, you're already familiar with Subversion, and now want to either extend it or build new software on top of its many APIs. Capitolo 8, Informazioni per lo sviluppatore is just for you.
L'assunto è che l'utente abbia usato CVS in precedenza e che muoia dalla voglia di avere un server Subversion funzionante il prima possibile. Il Capitolo 5, Repository Administration e il Capitolo 6, Configurazione del server mostreranno come creare il primo repository e come renderlo disponibile in rete. Fatto questo, il Capitolo 3, Visita guidata e l'Appendice A, Subversion per utenti CVS sono la via più veloce per imparare ad usare il client Subversion attingendo dall'esperienza con CVS.
L'amministratore ha già installato Subversion, e si vuole imparare ad utilizzare il client. Per chi non ha mai utilizzato un sistema di controllo di versione (come CVS), il Capitolo 2, Concetti base e il Capitolo 3, Visita guidata forniscono un'introduzione essenziale. Se invece si ha già una discreta esperienza con CVS, il capitolo 3 e l'appendice A sono il miglior punto di partenza.
Che si sia un utente o un amministratore, prima o poi si avrà a che fare con progetti grandi. Si vorrà quindi imparare come fare cose più avanzate con Subversion, ad esempio come usare i branch ed effettuare merge (Capitolo 4, Ramificazioni e fusioni), come usare il supporto di Subversion per le proprietà, come configurare le opzioni di runtime (Capitolo 7, Temi avanzati), e altro ancora. Questi due capitoli non sono di importanza vitale all'inizio, ma è meglio assicurarsi di leggerli, una volta presa confidenza con le operazioni di base.
Presubimilmente si ha già familiarità con Subversion ed ora si vuole estenderne le funzionalità o sviluppare nuovo software utilizzando le sue numerose API. Il Capitolo 8, Informazioni per lo sviluppatore è quello che ci vuole.
The book ends with reference material—Capitolo 9, Riferimento completo di Subversion is a reference guide for all Subversion commands, and the appendices cover a number of useful topics. These are the chapters you're mostly likely to come back to after you've finished the book.
Il libro si chiude con materiale di riferimento—il Capitolo 9, Riferimento completo di Subversion è una guida di riferimento per tutti i comandi di Subversion e le appendici coprono una serie di argomenti utili. Questi sono i capitoli su cui si tornerà con maggior probabilità, una volta finito di leggere il libro.
This section covers the various conventions used in this book.
Questa sezione descrive le varie convenzioni utilizzate nel resto del libro.
Used for commands, command output, and switches
Constant width italicUsed for replaceable items in code and text
ItalicUsed for file and directory names
Utilizzato per comandi, output di comandi e switch
Corsivo a larghezza fissaUtilizzato per elementi sostituibili nel codice e nel testo
CorsivoUtilizzato per nomi di file e directory
This icon designates a note relating to the surrounding text.
Questa icona indica una nota relativa al testo adiacente.
This icon designates a helpful tip relating to the surrounding text.
Questa icona indica un suggerimento utile relativo al testo adiacente.
This icon designates a warning relating to the surrounding text.
Questa icona indica un avviso relativo al testo adicente.
Note that the source code examples are just that—examples. While they will compile with the proper compiler incantations, they are intended to illustrate the problem at hand, not necessarily serve as examples of good programming style.
Notare che gli esempi di codice sorgente sono solo esempi. Sebbene compilino, sono stati scritti a supporto dell'illustrazione dei vari problemi, non sono necessariamente da prendere come esempi di buona programmazione.
The chapters that follow and their contents are listed here:
Segue la lista dei capitoli e del loro contenuto:
Covers the history of Subversion as well as its features, architecture, components, and install methods. Also includes a quick-start guide.
Riporta la storia di Subversion come pure le sue caratteristiche, l'architettura, i componenti ed i metodi d'installazione. Include anche una guida rapida.
Explains the basics of version control and different versioning models, along with Subversion's repository, working copies, and revisions.
Spiega le basi del controllo di versione e dei diversi modelli di versionamento, insieme a repository, copie di lavoro (working copies) e revisioni con Subversion.
Walks you through a day in the life of a Subversion user. It demonstrates how to use Subversion to obtain, modify, and commit data.
Descrive una giornata di lavoro di un utente di Subversion. Mostra come usare Subversion per ottenere, modificare ed effettuare commit di dati.
Discusses branches, merges, and tagging, including best practices for branching and merging, common use cases, how to undo changes, and how to easily swing from one branch to the next.
Discute branch, merge e tag, comprendendo consigli su come creare ramificazioni e fusioni (branching and merging), casi d'uso comuni, istruzioni su come annullare i cambiamenti e su come dondolarsi agilmente da un ramo (branch) ad un altro.
Describes the basics of the Subversion repository, how to create, configure, and maintain a repository, and the tools you can use to do all of this.
Descrive le basi del repository di Subversiion, come creare, configurare e manutenere un repository e i tool a disposizione per fare tutto questo.
Explains how to configure your Subversion server and
the three ways to access your repository:
HTTP, the svn
protocol, and local access. It also covers the details
of authentication, authorization and anonymous
access.
Spiega come configurare un server Subversion e
i tre modi per accedere al repository:
HTTP, il protocollo svn
e l'accesso locale. Copre anche i dettagli riguardanti autenticazione,
autorizzazione e accesso anonimo.
Explores the Subversion client configuration files,
file and directory properties, how to
ignore files in your working copy,
how to include external trees in your working copy, and
lastly, how to handle vendor branches.
Esplora i file di configurazione del client Subversion,
le proprietà di file e directory, come ignorare (ignore)
file nella copia di lavoro (working copy), come includere
alberature esterne nella copia di lavoro (working copy) e infine,
come gestire branch di terze parti.
Describes the internals of Subversion, the Subversion filesystem, and the working copy administrative areas from a programmer's point of view. Demonstrates how to use the public APIs to write a program that uses Subversion, and most importantly, how to contribute to the development of Subversion.
Descrive gli aspetti interni di Subversion, il file system di Subversion, e le aree amministrative della copia di lavoro (working copy), dal punto di vista di un programmatore. Mostra come usare le API pubbliche per scrivere un programma che utilizzi Subversion e, la cosa più importante, come contribuire allo sviluppo di Subversion.
Explains in great detail every subcommand of svn, svnadmin, and svnlook with plenty of examples for the whole family!
Spiega nei dettagli ogni comando di svn, svnadmin, e svnlook con molti esempi al riguardo!
Covers the similarities and differences between Subversion and CVS, with numerous suggestions on how to break all the bad habits you picked up from years of using CVS. Included are descriptions of Subversion revision numbers, versioned directories, offline operations, update vs. status, branches, tags, metadata, conflict resolution, and authentication.
Tratta le similitudini e differenze tra Subversion e CVS, con numerosi suggerimenti riguardanti come evitare le cattive abitudini acquisite in anni di utilizzo di CVS. Include descrizioni dei numeri di revisione in Subversion, delle directory versionate, delle operazioni offline, di update rispetto a status, di branch, tag, metadati, risoluzione di conflitti e autenticazione.
Describes the details of WebDAV and DeltaV, and how you can configure your Subversion repository to be mounted read/write as a DAV share.
Descrive i dettagli di WebDAV e DeltaV e come configurare il repository Subversion per essere montato in lettura/scrittura come condivisioe DAV.
Discusses tools that support or use Subversion, including alternative client programs, repository browser tools, and so on.
Discute tool che supportano o utilizzano Subversion, includendo programmi client alternativi, tool per l'esplorazione del repository e così via.
This book started out as bits of documentation written by Subversion project developers, which were then coalesced into a single work and rewritten. As such, it has always been under a free license. (See Appendice D, Copyright.) In fact, the book was written in the public eye, as a part of Subversion. This means two things:
Questo libro è nato da frammenti di documentazione scritti dagli sviluppatori del progetto Subversion, che in seguito li hanno unificati e riscritti a formare un unico scritto. Come tale, il libro è sempre stato sotto una licenza libera (vedere Appendice D, Copyright.). Infatti, il libro è stato scritto sotto i riflettori, come parte di Subversion. Cio' significa due cose:
You will always find the latest version of this book in the book's own Subversion repository.
È sempre possibile trovare la versione piu' aggiornata di questo libro nello specifico repository Subversion.
You can distribute and make changes to this book however you wish—it's under a free license. Of course, rather than distribute your own private version of this book, we'd much rather you send feedback and patches to the Subversion developer community. See la sezione chiamata «Contribuire a Subversion» to learn about joining this community.
Si può distribuire e modificare questo libro a piacimento — è sotto licenza libera. Naturalmente, piuttosto che distribuire la vostra versione privata di questo libro, noi preferiremmo che inviaste feedback e correzioni alla comunità di sviluppo di Subversion. Vedere la sezione chiamata «Contribuire a Subversion» per sapere come unirsi a questa comunità.
A relatively recent online version of this book can be found at http://svnbook.red-bean.com.
Una copia relativamente recente della versione online di questo libro si trova all'indirizzo: http://svnbook.red-bean.com.
This book would not be possible (nor very useful) if Subversion did not exist. For that, the authors would like to thank Brian Behlendorf and CollabNet for the vision to fund such a risky and ambitious new Open Source project; Jim Blandy for the original Subversion name and design—we love you, Jim; Karl Fogel for being such a good friend and a great community leader, in that order.[1]
Questo libro non esisterebbe (né sarebbe molto utile) se Subversion non esistesse. Per questo, gli autori vogliono ringraziare Brian Behlendorf e CollabNet per l'intuito nel finanziare un progetto Open Source così rischioso ed ambizioso; Jim Blandy per il nome e il progetto orginale di Subversion— ti vogliamo bene, Jim; Karl Fogel per essere, in quest'ordine, un così buon amico ed un grande leader per la comunità. [2]
Thanks to O'Reilly and our editors, Linda Mui and Tatiana Diaz for their patience and support.
Thanks alla O'Reilly ed ai suoi editori, Linda Mui e Tatiana Diaz per la loro pazienza e il loro sostegno.
Finally, we thank the countless people who contributed to this book with informal reviews, suggestions, and fixes: While this is undoubtedly not a complete list, this book would be incomplete and incorrect without the help of: Jani Averbach, Ryan Barrett, Francois Beausoleil, Jennifer Bevan, Matt Blais, Zack Brown, Martin Buchholz, Brane Cibej, John R. Daily, Peter Davis, Olivier Davy, Robert P. J. Day, Mo DeJong, Brian Denny, Joe Drew, Nick Duffek, Ben Elliston, Justin Erenkrantz, Shlomi Fish, Julian Foad, Chris Foote, Martin Furter, Dave Gilbert, Eric Gillespie, Matthew Gregan, Art Haas, Greg Hudson, Alexis Huxley, Jens B. Jorgensen, Tez Kamihira, David Kimdon, Mark Benedetto King, Andreas J. Koenig, Nuutti Kotivuori, Matt Kraai, Scott Lamb, Vincent Lefevre, Morten Ludvigsen, Paul Lussier, Bruce A. Mah, Philip Martin, Feliciano Matias, Patrick Mayweg, Gareth McCaughan, Jon Middleton, Tim Moloney, Mats Nilsson, Joe Orton, Amy Lyn Pilato, Kevin Pilch-Bisson, Dmitriy Popkov, Michael Price, Mark Proctor, Steffen Prohaska, Daniel Rall, Tobias Ringstrom, Garrett Rooney, Joel Rosdahl, Christian Sauer, Larry Shatzer, Russell Steicke, Sander Striker, Erik Sjoelund, Johan Sundstroem, John Szakmeister, Mason Thomas, Eric Wadsworth, Colin Watson, Alex Waugh, Chad Whitacre, Josef Wolf, Blair Zajac, and the entire Subversion community.
Infine, ringraziamo le innumerevoli persone che hanno contribuito a questo libro con revisioni informali, suggerimenti e correzioni: sebbene questa lista sia sicuramente incompleta, questo libro sarebbe incompleto e non corretto senza l'aiuto di: Jani Averbach, Ryan Barrett, Francois Beausoleil, Jennifer Bevan, Matt Blais, Zack Brown, Martin Buchholz, Brane Cibej, John R. Daily, Peter Davis, Olivier Davy, Robert P. J. Day, Mo DeJong, Brian Denny, Joe Drew, Nick Duffek, Ben Elliston, Justin Erenkrantz, Shlomi Fish, Julian Foad, Chris Foote, Martin Furter, Dave Gilbert, Eric Gillespie, Matthew Gregan, Art Haas, Greg Hudson, Alexis Huxley, Jens B. Jorgensen, Tez Kamihira, David Kimdon, Mark Benedetto King, Andreas J. Koenig, Nuutti Kotivuori, Matt Kraai, Scott Lamb, Vincent Lefevre, Morten Ludvigsen, Paul Lussier, Bruce A. Mah, Philip Martin, Feliciano Matias, Patrick Mayweg, Gareth McCaughan, Jon Middleton, Tim Moloney, Mats Nilsson, Joe Orton, Amy Lyn Pilato, Kevin Pilch-Bisson, Dmitriy Popkov, Michael Price, Mark Proctor, Steffen Prohaska, Daniel Rall, Tobias Ringstrom, Garrett Rooney, Joel Rosdahl, Christian Sauer, Larry Shatzer, Russell Steicke, Sander Striker, Erik Sjoelund, Johan Sundstroem, John Szakmeister, Mason Thomas, Eric Wadsworth, Colin Watson, Alex Waugh, Chad Whitacre, Josef Wolf, Blair Zajac, e l'intera comunità di Subversion.
Thanks to my wife Frances, who, for many months, got to hear, “But honey, I'm still working on the book”, rather than the usual, “But honey, I'm still doing email.” I don't know where she gets all that patience! She's my perfect counterbalance.
Grazie a mia moglie Frances, che, per molti mesi, ha dovuto sentirmi rispondere: «Ma tesoro, sto ancora lavorando al libro», invece del solito, «Ma tesoro, sto ancora scrivendo delle email. » Non so da dove prenda tutta quella pazienza! Mi controbilancia perfettamente.
Thanks to my extended family for their sincere encouragement, despite having no actual interest in the subject. (You know, the ones who say, “Ooh, you're writing a book?”, and then when you tell them it's a computer book, sort of glaze over.)
Grazie ai miei familiari per il loro sincero incoraggiamento, nonostante non abbiano un reale interesse nell'argomento. (Sono il tipo di persone che dicono: «Ooh, stai scrivendo un libro?», e poi quando gli si dice che è un libro di computer, entrano in confusione.)
Thanks to all my close friends, who make me a rich, rich man. Don't look at me that way—you know who you are.
Grazie a tutti i miei amici più vicini, che mi rendono un uomo ricco, ricco davvero. Non guardatemi in quel modo—voi sapete chi siete.
Huge thanks to my wife Marie for being incredibly understanding, supportive, and most of all, patient. Thank you to my brother Eric who first introduced me to UNIX programming way back when. Thanks to my Mom and Grandmother for all their support, not to mention enduring a Christmas holiday where I came home and promptly buried my head in my laptop to work on the book.
Un enorme ringraziamento a mia moglie Marie per essere incredibilmente comprensiva, di aiuto e, soprattutto, paziente. Grazie a mio fratello Eric che per primo mi ha introdotto al modo di programmare UNIX. Grazie a mia Mamma e a mia Nonna per tutto il loro aiuto, per non parlare dell'aver sopportato delle vacanze di Natale durante le quali sono tornato a casa ed immediatamente ho ficcato la testa nel portatile per lavorare al libro.
To Mike and Ben: It was a pleasure working with you on the book. Heck, it's a pleasure working with you at work!
A Mike e Ben: è stato un piacere lavorare con voi al libro. Accidenti, è un piacere lavorare con voi!
To everyone in the Subversion community and the Apache Software Foundation, thanks for having me. Not a day goes by where I don't learn something from at least one of you.
A chiunque nella comunità Subversion e nella Apache Software Foundation, grazie per avermi tra voi. Non passa giorno nel quale non impari qualcosa da almeno uno di voi.
Lastly, thanks to my Grandfather who always told me that “freedom equals responsibility.” I couldn't agree more.
Infine, grazie a mio Nonno che mi ha sempre detto che «libertà significa responsabilità.» Non potrei essere più d'accordo.
Special thanks to my wife, Amy, for her love and patient support, for putting up with late nights, and for even reviewing entire sections of this book—you always go the extra mile, and do so with incredible grace. Gavin, when you're old enough to read, I hope you're as proud of your Daddy as he is of you. Mom and Dad (and the rest of the family), thanks for your constant support and enthusiasm.
Un ringraziamento speciale a mia moglie, Amy, per il suo amore e paziente sostegno, per aver sopportato pazientemente di stare alzata fino a notte fonda, e per aver persino revisionato intere sezioni di questo libro—fai sempre più di quello che ci si aspetta e lo fai con una grazia incredibile. Gavin, quando sarai abbastanza grande per leggere, spero che tu possa essere orgoglioso di tuo padre come lui lo è di te. Mamma e papà (e il resto della famiglia), grazie per il vostro costante sostegno ed entusiamo.
Hats off to Shep Kendall, through whom the world of
computers was first opened to me; Ben Collins-Sussman, my
tour-guide through the open-source world; Karl Fogel—you
are my .emacs; Greg
Stein, for oozing practical programming know-how; Brian
Fitzpatrick—for sharing this writing experience with me.
To the many folks from whom I am constantly picking up new
knowledge—keep dropping it!
Giù il cappello per Shep Kendall, il quale mi ha introdotto al
mondo dei computer; Ben Collins-Sussman, la mia guida turistica
nel mondo open-source; Karl Fogel— tu
sei il mio .emacs; Greg
Stein, per aver distillato conoscenze pratiche di programmazione;
Brian Fitzpatrick— per avere condiviso come me questa esperienza di scrittura.
A tutti coloro dai quali costantemente raccolgo nuova conoscenza
—continuate a lasciarla cadere!
Finally, to the One who perfectly demonstrates creative excellence—thank you.
Infine, all'Unico che davvero dimostra eccellenza creativa — grazie a te.
Sommario
Version control is the art of managing changes to information. It has long been a critical tool for programmers, who typically spend their time making small changes to software and then undoing those changes the next day. But the usefulness of version control software extends far beyond the bounds of the software development world. Anywhere you can find people using computers to manage information that changes often, there is room for version control. And that's where Subversion comes into play.
Il controllo di versione è l'arte di gestire i cambiamenti delle informazioni. È stato per molto tempo uno strumento critico per i programmatori che, tipicamente, passano le loro giornate ad effettuare piccoli cambiamenti al software per poi cancellare le modifiche il giorno seguente. Ma l'utilità di un software di versionamento si estende ben oltre i confini del mondo dello sviluppo di software. Ovunque ci siano persone che utilizzano il computer per gestire informazioni che cambiano di frequente, lì trova spazio il controllo di versione. Qui entra in gioco Subversion.
This chapter contains a high-level introduction to Subversion—what it is; what it does; how to get it.
Questo capitolo contiene un'introduzione di alto livello a Subversion—cos'è; cosa fa; come ottenerlo.
Subversion is a free/open-source version control system. That is, Subversion manages files and directories over time. A tree of files is placed into a central repository. The repository is much like an ordinary file server, except that it remembers every change ever made to your files and directories. This allows you to recover older versions of your data, or examine the history of how your data changed. In this regard, many people think of a version control system as a sort of “time machine”.
Subversion è un sistema di controllo di versione libero e open-source. Cioè Subversion gestisce file e directory nel tempo. Un'alberatura di file è inserita all'interno di un repository centrale. Il repository è paragonabile ad un file server, in più esso ricorda qualsiasi cambiamento apportato ai file e alle directory. Ciò permette di ripristinare vecchie versioni dei dati o di esaminare lo storico dei cambiamenti. Per questo motivo, molte persone considerano un sistema di controllo di versione come una sorta di «macchina del tempo».
Subversion can access its repository across networks, which allows it to be used by people on different computers. At some level, the ability for various people to modify and manage the same set of data from their respective locations fosters collaboration. Progress can occur more quickly without a single conduit through which all modifications must occur. And because the work is versioned, you need not fear that quality is the trade-off for losing that conduit—if some incorrect change is made to the data, just undo that change.
Subversion può accedere al suo repository attraverso reti di computer; ciò gli permette di essere utilizzato da più persone contemporaneamente su più computer. In qualche modo, la possibilità per più persone di modificare e gestire lo stesso insieme di dati, dalle rispettive postazioni, alimenta la collaborazione. I Miglioramenti possono intervenire più velocemente se le modifiche non devono per forza passare per un unico canale. Dato che il lavoro è sotto controllo di versione, non c'è da temere che la qualità scadente sia il prezzo da pagare per poter evitare quell'unico canale—se vengono applicate ai dati alcune modifiche non corrette, basta annullare tali cambiamenti.
Some version control systems are also software configuration management (SCM) systems. These systems are specifically tailored to manage trees of source code, and have many features that are specific to software development—such as natively understanding programming languages, or supplying tools for building software. Subversion, however, is not one of these systems. It is a general system that can be used to manage any collection of files. For you, those files might be source code—for others, anything from grocery shopping lists to digital video mixdowns and beyond.
Alcuni sistemi per il controllo di versione sono anche sistemi di software configuration management (SCM). Questi sistemi sono orientati specificatamente alla gestione di alberature di codice sorgente e hanno molte caratteristiche che sono specifiche dello sviluppo software—come la capacità nativa di riconoscere i linguaggi di programmazione o l'integrazione di strumenti per la compilazione del software. Subversion, tuttavia, non è uno di questi sistemi. È un sistema generico che può essere utilizzato per gestire qualsiasi insieme di file. Per qualcuno questi file possono contenere codice sorgente—per altri qualunque altra cosa, dalla lista della spesa a montaggi video digitali e così via.
In early 2000, CollabNet, Inc. (http://www.collab.net) began seeking developers to write a replacement for CVS. CollabNet offers a collaboration software suite called CollabNet Enterprise Edition (CEE) [3] of which one component is version control. Although CEE used CVS as its initial version control system, CVS's limitations were obvious from the beginning, and CollabNet knew it would eventually have to find something better. Unfortunately, CVS had become the de facto standard in the open source world largely because there wasn't anything better, at least not under a free license. So CollabNet determined to write a new version control system from scratch, retaining the basic ideas of CVS, but without the bugs and misfeatures.
All'inizio del 2000, CollabNet, Inc. (http://www.collab.net) iniziò a cercare sviluppatori per scrivere un software che sostituisse CVS. CollabNet offre una suite di software collaborativi chiamata CollabNet Enterprise Edition (CEE) [4] di cui un componente è il controllo di versione. Sebbene CEE usasse inizialmente CVS come sistema di versionamento, le limitazioni di CVS erano evidenti fin dal principio e CollabNet sapeva che alla fine avrebbe dovuto trovare qualcosa di meglio. Sfortunatamente, CVS nel frattempo era diventato lo standard de facto nel mondo open source, principalmente perché non c'era nulla di meglio, per lo meno non sotto una licenza libera. Così CollabNet decise di scrivere da zero un nuovo sistema per il controllo di versione, mantenendo l'idea base di CVS ma evitando i suoi bug e aggiungendo funzionalità.
In February 2000, they contacted Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999), and asked if he'd like to work on this new project. Coincidentally, at the time Karl was already discussing a design for a new version control system with his friend Jim Blandy. In 1995, the two had started Cyclic Software, a company providing CVS support contracts, and although they later sold the business, they still used CVS every day at their jobs. Their frustration with CVS had led Jim to think carefully about better ways to manage versioned data, and he'd already come up with not only the name “Subversion”, but also with the basic design of the Subversion repository. When CollabNet called, Karl immediately agreed to work on the project, and Jim got his employer, Red Hat Software, to essentially donate him to the project for an indefinite period of time. CollabNet hired Karl and Ben Collins-Sussman, and detailed design work began in May. With the help of some well-placed prods from Brian Behlendorf and Jason Robbins of CollabNet, and Greg Stein (at the time an independent developer active in the WebDAV/DeltaV specification process), Subversion quickly attracted a community of active developers. It turned out that many people had had the same frustrating experiences with CVS, and welcomed the chance to finally do something about it.
Nel febbraio del 2000, fu contattato Karl Fogel, l'autore del libro Open Source Development with CVS (Coriolis, 1999), al quale fu chiesto se avrebbe avuto piacere di lavorare su questo nuovo progetto. Coincidenza volle che, in quel periodo, Karl stesse già lavorando a un progetto per un nuovo sistema di versionamento con il suo amico Jim Blandy. Nel 1995, i due avevano fondato la Cyclic Software, una compagnia che si occupava di fornire supporto all'utilizzo di CVS e, sebbene in seguito essi avessero ceduto la loro attività, avevano continuato ad utilizzare CVS nel loro lavoro di tutti i giorni. La loro frustrazione nel lavorare con CVS, aveva portato Jim a ragionare accuratamente per trovare modi migliori per gestire dati versionati e aveva già ideato non solo il nome «Subversion», ma anche il progetto di base del repository Subversion. Quando CollabNet li contattò, Karl accettò immediatamente di lavorare al progetto, e Jim ottenne dalla sua azienda, la Red Hat Software, sostanzialmente di potersi dedicare al progetto a tempo indeterminato. CollabNet assunse Karl e Ben Collins-Sussman e il lavoro vero e proprio sul progetto iniziò nel mese di maggio. Con l'aiuto di alcune spinte nella giusta direzione da parte di Brian Behlendorf e Jason Robbins di CollabNet e di Greg Stein (al tempo sviluppatore indipendente attivo nel processo di specifica di WebDAV/DeltaV), Subversion in breve tempo attrasse intorno a sé una gruppo di attivi sviluppatori. Ciò dimostrava che molte persone avevano avuto le stesse frustranti esperienze con CVS, e accoglievano con entusiasmo la possibilità di fare finalmente qualcosa per migliorarlo.
The original design team settled on some simple goals. They didn't want to break new ground in version control methodology, they just wanted to fix CVS. They decided that Subversion would match CVS's features, and preserve the same development model, but not duplicate CVS's most obvious flaws. And although it did not need to be a drop-in replacement for CVS, it should be similar enough that any CVS user could make the switch with little effort.
Il team di sviluppo originario si concentrò su alcuni semplici obiettivi. Essi non volevano introdurre un nuovo approccio nella metodologia del controllo di versione ma volevano solamente migliorare CVS. Decisero che Subversion avrebbe incluso le caratteristiche di CVS e preservato il medesimo modello di sviluppo, ma non avrebbe riproposto le sue più ovvie debolezze. E sebbene il loro software non avesse bisogno di presentarsi come una copia di CVS, sarebbe comunque dovuto essere abbastanza simile da permettere a qualsiasi utente di CVS di cambiare e utilizzare Subversion con pochissima fatica.
After fourteen months of coding, Subversion became “self-hosting” on August 31, 2001. That is, Subversion developers stopped using CVS to manage Subversion's own source code, and started using Subversion instead.
Dopo quattordici mesi passati a scrivere codice, Subversion divenne «self-hosting» il 31 agosto 2001. Da quel momento, cioè, gli sviluppatori smisero di utilizzare CVS per gestire il codice di Subversion e iniziarono ad utilizzare Subversion stesso.
While CollabNet started the project, and still funds a large chunk of the work (it pays the salaries of a few full-time Subversion developers), Subversion is run like most open-source projects, governed by a loose, transparent set of rules that encourage meritocracy. CollabNet's copyright license is fully compliant with the Debian Free Software Guidelines. In other words, anyone is free to download, modify, and redistribute Subversion as he pleases; no permission from CollabNet or anyone else is required.
Sebbene CollabNet abbia avviato il progetto e tuttora finanzi la maggior parte del lavoro (paga lo stipendio di un piccolo gruppo di sviluppatori che lavora su Subversion a tempo pieno), Subversion viene portato avanti come la maggior parte dei progetti open-source, gestito attraverso un insieme di regole aperto e trasparente che incoraggia la meritocrazia. La licenza di copyright di CollabNet rispetta pienamente le linee guida Debian Free Software. In altre parole, chiunque è libero di scaricare, modificare e redistribuire Subversion come preferisce; senza richiedere alcun permesso a CollabNet o a chiunque altro.
When discussing the features that Subversion brings to the version control table, it is often helpful to speak of them in terms of how they improve upon CVS's design. If you're not familiar with CVS, you may not understand all of these features. And if you're not familiar with version control at all, your eyes may glaze over unless you first read Capitolo 2, Concetti base, in which we provide a gentle introduction to version control in general.
Discutere le caratteristiche che Subversion porta al tavolo del controllo di versione, è spesso utile per approfondire in che modo tali peculiarità apportino miglioramenti alla struttura di CVS. Se non si ha familiarità con CVS, si rischia di non comprenderne a dovere l'efficacia. Se, poi, il lettore non ha dimestichezza con il controllo di versione in generale, i suoi occhi potrebbero coprirsi di una patina a meno che non si legga prima Capitolo 2, Concetti base, nel quale viene fornita una precisa introduzione al generale concetto di versionamento.
Subversion provides:
Subversion offre:
CVS only tracks the history of individual files, but Subversion implements a “virtual” versioned filesystem that tracks changes to whole directory trees over time. Files and directories are versioned.
Solo CVS traccia la storia dei soli files, mentre Subversion implementa il versionamento di un filesystem «virtuale» che traccia i cambiamenti nel tempo degli interi alberi directory. I files e le directory vengono quindi versionate.
Since CVS is limited to file versioning, operations such as copies and renames—which might happen to files, but which are really changes to the contents of some containing directory—aren't supported in CVS. Additionally, in CVS you cannot replace a versioned file with some new thing of the same name without the new item inheriting the history of the old—perhaps completely unrelated—file. With Subversion, you can add, delete, copy, and rename both files and directories. And every newly added file begins with a fresh, clean history all its own.
Dal momento che CVS è limitato al versionamento dei soli files, operazioni come copia e rinomina—che dovrebbero essere propri dei files, ma che poi non sono altro che modifiche ai contenuti di ciò che contiene una directory—non sono supportate in CVS. In più, in CVS non è possibile rimpiazzare un file versionato con un nuovo file che ne erediti il nome ma non la storia—perché completamente differente dal vecchio file. Con Subversion, è possibile aggiungere, cancellare, copiare e rinominare sia files che directories. E ogni file aggiunto nuovamente, inizia con una storia nuova e pulita tutta per se.
A collection of modifications either goes into the repository completely, or not at all. This allows developers to construct and commit changes as logical chunks, and prevents problems that can occur when only a portion of a set of changes is successfully sent to the repository.
Un insieme di modifiche o vengono inserite nel repository tutte insieme o non ne viene inserita nessuna. Ciò permette agli sviluppatori di costruire ed effettuare commit di cambiamenti come un blocco logico unico, prevenendo problemi che possono occorrere quando solo una parte di un set di modifiche vengono inviate con successo al repository.
Each file and directory has a set of properties—keys and their values—associated with it. You can create and store any arbitrary key/value pairs you wish. Properties are versioned over time, just like file contents.
Ogni file e directory ha un set di proprietà—chiavi e rispettivi valori—ad esso associati . L'utilizzatore può creare e memorizzare arbitrariamente qualsiasi coppia di chiave/valore che preferisce. Le proprietà sono soggette a versionamento esattamente come il file a cui sono associate.
Subversion has an abstracted notion of repository access, making it easy for people to implement new network mechanisms. Subversion can plug into the Apache HTTP Server as an extension module. This gives Subversion a big advantage in stability and interoperability, and instant access to existing features provided by that server—authentication, authorization, wire compression, and so on. A more lightweight, standalone Subversion server process is also available. This server speaks a custom protocol which can be easily tunneled over SSH.
Subversion ha una nozione astratta di accesso al repository, che rende semplice per chiunque implementare nuovi meccanismi di accesso via rete. Inoltre è possibile integrarlo con Apache HTTP Server, come modulo di estensione. Ciò conferisce a Subversion un grande vantaggio in stabilità e interoperabilità, oltre ad un accesso istantaneo alle caratteristiche che tale webserver mette a disposizione—autenticazione, autorizzazione, wire compression, e così via. È comunque disponibile anche un processo server a se stante e 'leggero' dedicato a Subversion. Questo server è progettato su un protocollo proprio che può essere facilmente veicolato su SSH.
Subversion expresses file differences using a binary differencing algorithm, which works identically on both text (human-readable) and binary (human-unreadable) files. Both types of files are stored equally compressed in the repository, and differences are transmitted in both directions across the network.
Subversion esprime le differenze di un file usando un algoritmo di differenziazione binario, che lavora ugualmente sia sui files di testo (leggibili dall'uomo) che sui files binari (illeggibili dall'uomo). Entrambi i tipi di files sono memorizzati ugualmente compressi nel repository e le differenze sono trasmesse in entrambi i casi attraverso la rete.
The cost of branching and tagging need not be proportional to the project size. Subversion creates branches and tags by simply copying the project, using a mechanism similar to a hard-link. Thus these operations take only a very small, constant amount of time.
Il costo in termini di tempo e spazio dedicato al branching e al tagging non deve essere proporzionale alla grandezza del progetto. Subversion crea branches e tags utilizzando un meccanismo simile all'hard-link unix (collegamento) per copiare il progetto. In questo modo, tali operazioni occupano solo una quantità di tempo molto breve e costante.
Subversion has no historical baggage; it is implemented as a collection of shared C libraries with well-defined APIs. This makes Subversion extremely maintainable and usable by other applications and languages.
Subversion non ha alcun bagaglio storico; è implementato come una collezione di librerie C condivise con delle APIs ben definite. Ciò lo rende estremamente mantenibile e utilizzabile da altre applicazioni e in altre lingue.
Figura 1.1, «Architettura di Subversion» illustra ciò che si può chiamare una vista «dall'altezza di un miglio» dell'architettura di Subversion.
On one end is a Subversion repository that holds all of your versioned data. On the other end is your Subversion client program, which manages local reflections of portions of that versioned data (called “working copies”). Between these extremes are multiple routes through various Repository Access (RA) layers. Some of these routes go across computer networks and through network servers which then access the repository. Others bypass the network altogether and access the repository directly.
Ad un estremo c'è il repository Subversion che contiene tutti i vostri dati sotto controllo di versione. All'altro estremo c'è il vostro client Subversion, che gestisce le specchiature locali di parte dei dati sotto controllo di versione (chiamate «copie locali»). Tra questi estremi vi sono diversi percorsi tramite vari strati per l'Accesso al Repository (AR). Alcune di queste strade attraversano reti di computer e reti di server che che a loro volta accedono il repository. Altre scavalcano del tutto la rete ed accedono direttamente il repository.
Subversion is built on a portability layer called APR—the Apache Portable Runtime library. The APR library provides all the interfaces that Subversion needs to function on different operating systems: disk access, network access, memory management, and so on. While Subversion is able to use Apache as one of its network server programs, its dependence on APR does not mean that Apache is a required component. APR is a standalone library useable by any application. It does mean, however, that like Apache, Subversion clients and servers run on any operating system that the Apache httpd server runs on: Windows, Linux, all flavors of BSD, Mac OS X, Netware, and others.
Subversion è costruito su uno strato portabile chiamato APR— la libreria Apache Portable Runtime. La libreria APR fornisce tutte le interfaccie per le funzioni richieste da Subversion per funzionare su diversi sistemi operativi: l'accesso al disco, alla rete, la gestione della memoria e così via. Anche se Subversion è in grado di utilizzare Apache come uno dei possibili componenti lato server, la sua dipendenza da APR non significa che Apache sia un componente rihiesto per funzionare. Significa, comunque, che come Apache, i client ed i server di Subversion funzionano su ogni sistema operativo sul quale gira il server httpd Apache: Windows, Linux, tutte le varianti di BSD, MAc OS X, Netware ed altri.
The easiest way to get Subversion is to download a binary package built for your operating system. Subversion's website (http://subversion.tigris.org) often has these packages available for download, posted by volunteers. The site usually contains graphical installer packages for users of Microsoft operating systems. If you run a Unix-like operating system, you can use your system's native package distribution system (RPMs, DEBs, the ports tree, etc.) to get Subversion.
Il modo più facile per ottenere Subversion è scaricare il pacchetto di eseguibili già pronto per il vostro sistema operativo. Il sito web di Subversion (http://subversion.tigris.org) rende disponibili questi pacchetti, preparati ed inviati da volontari. Il sito normalmente contiene pacchetti d'installazione grafici per gli utenti dei sistemi operativi Microsoft. Se siete utenti di un sistema operativo di tipo Unix, per ottenere Subversion potete utilizzare i sistemi di distribuzione nativi per il vostro sistema (RPMs. DEBs, ports tree, etc.).
Alternately, you can build Subversion directly from source code. From the Subversion website, download the