<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://vistapedia.com/index.php?action=history&amp;feed=atom&amp;title=VistA_Version_Control_is_Hard</id>
	<title>VistA Version Control is Hard - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://vistapedia.com/index.php?action=history&amp;feed=atom&amp;title=VistA_Version_Control_is_Hard"/>
	<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;action=history"/>
	<updated>2026-04-30T15:48:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=14021&amp;oldid=prev</id>
		<title>NeilArmstrong: Added glossary link to Application~</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=14021&amp;oldid=prev"/>
		<updated>2012-02-22T16:09:55Z</updated>

		<summary type="html">&lt;p&gt;Added glossary link to Application~&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:09, 22 February 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l47&quot;&gt;Line 47:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 47:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;have their own branch that&amp;#039;s distro-independent.  All the distros would&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;have their own branch that&amp;#039;s distro-independent.  All the distros would&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;merge changes from the FileMan group to maintain a &amp;quot;shared core&amp;quot;, while&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;merge changes from the FileMan group to maintain a &amp;quot;shared core&amp;quot;, while&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;each distribution does their own application work.  Provided that the&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;each distribution does their own &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;application&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;~|Application]] &lt;/ins&gt;work.  Provided that the&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;code/data structures are compatible and the licenses are compatible, the&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;code/data structures are compatible and the licenses are compatible, the&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;distributions could merge changes across - so WorldVista could merge in&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;distributions could merge changes across - so WorldVista could merge in&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>NeilArmstrong</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=10216&amp;oldid=prev</id>
		<title>JohnLeoZ at 23:31, 8 July 2009</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=10216&amp;oldid=prev"/>
		<updated>2009-07-08T23:31:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:31, 8 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l93&quot;&gt;Line 93:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 93:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;editors note: because this was copied from Medsphere.org, its creative commons license applies.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;editors note: because this was copied from Medsphere.org, its creative commons license applies.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;See also:[http://vistaexpertise.blogspot.com/2009/06/point-2-vista-requires-many-code.html VISTA Expertise Network]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JohnLeoZ</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=5587&amp;oldid=prev</id>
		<title>Ftrotter: add creative commons note</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=5587&amp;oldid=prev"/>
		<updated>2009-07-08T19:35:22Z</updated>

		<summary type="html">&lt;p&gt;add creative commons note&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:35, 8 July 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;People have suggested that we use a version control system for VistA countless times. However, VistA cannot just use git or subversion or whatever. Those systems cannot handle the way VistA&#039;s code is designed. This wiki article was copied in mass from a [http://medsphere.org/people/jon.tai/blog/2009/07/01/the-case-for-distributed-revision-control-in-the-vista-community post on the subject by Jonathan Tai].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;People have suggested that we use a version control system for VistA countless times. However, VistA cannot just use git or subversion or whatever. Those systems cannot handle the way VistA&#039;s code is designed. This wiki article was copied in mass from a [http://medsphere.org/people/jon.tai/blog/2009/07/01/the-case-for-distributed-revision-control-in-the-vista-community post on the subject by Jonathan Tai]. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In response to a [http://groups.google.com/group/Hardhats/browse_thread/thread/af94f540f527d10d Hardhats thread on the subject]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For VistA development to really take off, we need distributed revision&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For VistA development to really take off, we need distributed revision&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l91&quot;&gt;Line 91:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 91:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;thought has gone into how to do #2, but I haven&amp;#039;t seen anything workable&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;thought has gone into how to do #2, but I haven&amp;#039;t seen anything workable&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;yet.  For now, I agree with Ignacio that we should do what we can, i.e., #1.  Standardize on a distributed revision control tool so we can build the tools for #2 around it.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;yet.  For now, I agree with Ignacio that we should do what we can, i.e., #1.  Standardize on a distributed revision control tool so we can build the tools for #2 around it.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;editors note: because this was copied from Medsphere.org, its creative commons license applies.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ftrotter</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=5585&amp;oldid=prev</id>
		<title>Ftrotter: initial</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=VistA_Version_Control_is_Hard&amp;diff=5585&amp;oldid=prev"/>
		<updated>2009-07-08T19:27:00Z</updated>

		<summary type="html">&lt;p&gt;initial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;People have suggested that we use a version control system for VistA countless times. However, VistA cannot just use git or subversion or whatever. Those systems cannot handle the way VistA&amp;#039;s code is designed. This wiki article was copied in mass from a [http://medsphere.org/people/jon.tai/blog/2009/07/01/the-case-for-distributed-revision-control-in-the-vista-community post on the subject by Jonathan Tai].&lt;br /&gt;
&lt;br /&gt;
For VistA development to really take off, we need distributed revision&lt;br /&gt;
control and automated merging.&lt;br /&gt;
&lt;br /&gt;
Take Linux for example.  Linux uses a distributed revision control&lt;br /&gt;
system called git.  Linus has a branch of Linux that is the &amp;quot;official&amp;quot;&lt;br /&gt;
branch. This is called the &amp;quot;mainline&amp;quot;.  Everyone can make a copy of&lt;br /&gt;
this branch and do their own development.  So far, it sounds just like&lt;br /&gt;
centralized revision control, but the difference between centralized and&lt;br /&gt;
distributed is that you can commit to your own private branch.  You&lt;br /&gt;
don&amp;#039;t need permission from anyone.  With a centralized system like&lt;br /&gt;
Subversion, you have to have commit access to the repository, so you&lt;br /&gt;
start by submitting one-off patches here and there until you gain enough&lt;br /&gt;
karma to be entrusted with commit access.  This doesn&amp;#039;t scale.  More on&lt;br /&gt;
this later...&lt;br /&gt;
&lt;br /&gt;
Getting back to the example, when you have done some development and are satisfied with it, you can publish your branch in a public location. You can then bring the branch to the official maintainer&amp;#039;s attention, and request that he &amp;quot;merge&amp;quot; or &amp;quot;pull&amp;quot; your branch.  This is another critical difference - with distributed version control, changes are *pulled*, not *pushed*.  So the first time you request a merge, the maintainer can inspect your code closely.  He may suggest changes.  You can do those in your own branch (and each change is tracked because you can commit to your own branch) and re-submit your request.  With a centralized system, you&amp;#039;d be sending a patch.  If you&amp;#039;re a frequent contributor, the maintainer may review your code less closely because he trusts you more, but the review process is built in.&lt;br /&gt;
&lt;br /&gt;
After a little re-working, the maintainer finally decides your code is&lt;br /&gt;
worthy for merging.  With automated merging, even if that maintainer has&lt;br /&gt;
made changes to other parts of the codebase since you cloned his branch,&lt;br /&gt;
when the maintainer merges your branch, your changes are brought in&lt;br /&gt;
automatically.  If other people have branched off *your* branch and&lt;br /&gt;
those changes have been merged already, most distributed systems are&lt;br /&gt;
smart enough to figure that out and only merge the unmerged revisions.&lt;br /&gt;
Subversion has gotten a lot better at this recently, but in earlier&lt;br /&gt;
versions, it was *terrible* at this.&lt;br /&gt;
&lt;br /&gt;
Another important point is that each branch is equal (at least on a&lt;br /&gt;
technical level) - the maintainer&amp;#039;s branch is only special because it&amp;#039;s&lt;br /&gt;
the maintainer&amp;#039;s branch and is recognized by the community as the&lt;br /&gt;
official branch.  If the maintainer were to become disinterested in the&lt;br /&gt;
software or otherwise unable to maintain it, or should you want to take&lt;br /&gt;
the software in a different direction, your branch could just as easily&lt;br /&gt;
become *the* branch.  Getting back to the Linux example, each subsystem&lt;br /&gt;
maintainer has his own tree - there are trees dedicated to filesystems,&lt;br /&gt;
to memory managers, drivers, etc.  There are also trees dedicated to&lt;br /&gt;
stability, so they branch off an official Linux release and then only&lt;br /&gt;
merge critical bugfixes from that point on.  If you wanted a more stable&lt;br /&gt;
version of Linux, you may follow that branch instead of the official&lt;br /&gt;
mainline branch.&lt;br /&gt;
&lt;br /&gt;
So in the VistA world - imagine several distributions like WorldVistA,&lt;br /&gt;
OpenVista, FOIA VistA, vxVistA, etc.  Each would have their own&lt;br /&gt;
mainline.  We could have package branches - so the FileMan group might&lt;br /&gt;
have their own branch that&amp;#039;s distro-independent.  All the distros would&lt;br /&gt;
merge changes from the FileMan group to maintain a &amp;quot;shared core&amp;quot;, while&lt;br /&gt;
each distribution does their own application work.  Provided that the&lt;br /&gt;
code/data structures are compatible and the licenses are compatible, the&lt;br /&gt;
distributions could merge changes across - so WorldVista could merge in&lt;br /&gt;
the server-side OpenVista CIS patches to allow CIS to run against&lt;br /&gt;
WorldVista.  And most importantly, when OpenVista updates those patches,&lt;br /&gt;
WorldVista could just merge the new changes.  If automated merging&lt;br /&gt;
worked properly, this would be very seamless and easy - no re-porting&lt;br /&gt;
required.&lt;br /&gt;
&lt;br /&gt;
In fact, you could take it a step further.  Each implementing site could&lt;br /&gt;
choose to have (and maintain) their own branch.  So a site might branch&lt;br /&gt;
off of WorldVistA&amp;#039;s mainline, make a few local mods, then merge new&lt;br /&gt;
changes from WorldVista as time goes on.  And if WorldVistA liked those&lt;br /&gt;
local changes, they could merge in the other direction - the local&lt;br /&gt;
changes are accepted back into the main distribution.  For an&lt;br /&gt;
all-volunteer distribution like WorldVistA, this may be the main source&lt;br /&gt;
of their changes.&lt;br /&gt;
&lt;br /&gt;
So why don&amp;#039;t we do all of this now?  First of all, some of us are still&lt;br /&gt;
using centralized revision control.  That&amp;#039;s what Ignacio was trying to&lt;br /&gt;
address by starting this thread.  Fixing this is the easy part -&lt;br /&gt;
switching from a centralized model to a distributed model is fairly&lt;br /&gt;
simple because the centralized model is just a subset of the distributed&lt;br /&gt;
model.  It&amp;#039;s like having just one branch that everyone commits to.&lt;br /&gt;
&lt;br /&gt;
The second thing we need is automated merging.  What we need to do is&lt;br /&gt;
come up with a way to express VistA structures in a way that existing&lt;br /&gt;
revision control tools can understand.  Right now, a menu is stored in&lt;br /&gt;
FileMan, which is stored as globals in a binary database file.  A tool&lt;br /&gt;
designed to handle source code can&amp;#039;t handle that.  It doesn&amp;#039;t know how&lt;br /&gt;
to merge two multi-gigabyte binary blobs to make a meaningful new&lt;br /&gt;
version.  We could export the database as plain text (e.g., %GO or&lt;br /&gt;
ZWRITE format), but even that is not enough to allow automated merging&lt;br /&gt;
because a menu might have a certain IEN at one site but another IEN at&lt;br /&gt;
another site.  The existing tools have no idea what&amp;#039;s important and&lt;br /&gt;
needs to be merged and what is site-specific and can be discarded.  What&lt;br /&gt;
we need is an abstract representation of a menu, similar to what KIDS&lt;br /&gt;
has.  If we can present these VistA structures to an existing tool, we&lt;br /&gt;
can leverage the power of these existing tools to do development as a&lt;br /&gt;
community more efficiently.&lt;br /&gt;
&lt;br /&gt;
From talking to various folks at the VistA Community Meetings, some&lt;br /&gt;
thought has gone into how to do #2, but I haven&amp;#039;t seen anything workable&lt;br /&gt;
yet.  For now, I agree with Ignacio that we should do what we can, i.e., #1.  Standardize on a distributed revision control tool so we can build the tools for #2 around it.&lt;/div&gt;</summary>
		<author><name>Ftrotter</name></author>
	</entry>
</feed>