On 2014-01-31 11:45-0500 Hazen Babcock wrote:

> On 1/30/2014 5:51 PM, Alan W. Irwin wrote:
>> On 2014-01-30 16:35-0500 Hazen Babcock wrote:
>> 
>>> Hello,
>>> 
>>> I know this has come up before. However, I've been using git alot at
>>> work and I feel that it has many advantages over SVN and I think we
>>> should again consider switching over (after the next release of course).
>>> To get an idea of the power of git I would suggest reading the first 3
>>> chapters of this (online) book:
>>> http://git-scm.com/book
>>> 
>>> And I was even inspired enough to create a git clone of the PLplot
>>> project which is available here:
>>> https://github.com/HazenBabcock/PLplot
>>> 
>>> The conversion was performed using svn2git as described here:
>>> https://github.com/nirvdrum/svn2git
>>> 
>>> While I did run into some issues (and bugs in conversion program) along
>>> the way, I believe that it is "complete and accurate", and includes all
>>> the branches and version tags.
>> 
>> Hi Hazen:
>> 
>> Can you confirm you have been able to preserve all our svn history
>> (which includes our cvs history) in that git repository back to
>> revision 1? If so, that would be a very promising sign concerning the
>> quality of the svn2git conversion tool (or workarounds you used
>> for its conversion bugs).
>> 
>> I am more welcoming towards the idea of converting PLplot to a git
>> repository than previously.  Thanks to many git recommendations like
>> yours, I do plan to start learning how to use git in the near future.
>> My one collaborator for the timeephemeris project (much less
>> complicated than PLplot) also prefers git, and because of his needs
>> and because I thought it was time to learn git I plan to switch that
>> project from svn to git in the next month or so and will presumably
>> learn git rather fast after that. So let's see how that goes, but
>> assuming that conversion and my practical use of git after that is a
>> success, then I would be willing to go along with a switch to git
>> later this year if our other PLplot core developers are willing to do
>> that as well.
>> 
>> I have just reviewed the subset of the svn commands that I ordinarily
>> use with PLplot
>> and other projects.
>> 
>> Those are
>>     add
>>     cat
>>     checkout (co)
>>     commit (ci)
>>     copy (cp)
>>     delete (del, remove, rm)
>>     diff (di)
>>     export
>>     help (?, h)
>>     log
>>     move (mv, rename, ren)
>>     propdel (pdel, pd)
>>     propedit (pedit, pe)
>>     propget (pget, pg)
>>     proplist (plist, pl)
>>     propset (pset, ps)
>>     revert
>>     status (stat, st)
>>     update (up)
>> 
>> You don't have to do this to convince me since I am going to be
>> learning git regardless later this year, but it might help your case
>> with those developers here who are not familiar yet with git and are
>> wondering how painful using git is going to be to create a short
>> summary of how a developer would go about normal PLplot development in
>> a git world. I further suggest you keep that summary as simple as
>> possible (just giving the minimal git commands that do the equivalent
>> of the above svn commands) because one of the intimidating factors for
>> git is the large command set with large numbers of options.  That
>> complexity makes git very powerful indeed, but also makes it
>> difficult/intimidating to learn.
>
> Hi Alan,
>
> Regarding the conversion:
> 1. The first ever commit?
> $git log | tail
> Author: furnish <furn...@users.sourceforge.net>
> Date:   Wed May 20 21:36:02 1992 +0000
>
>    Initial checkin of the whole PLPLOT project.
>
> commit 60a5c3966d86eef16dbf391dc40647fa3fcedb30
> Author: no_author <no_aut...@users.sourceforge.net>
> Date:   Wed May 20 21:36:02 1992 +0000
>
>    New repository initialized by cvs2svn.
>
> 2. Alan's first commit?
> $git log | grep airwin -A 5 | tail
> [snip]
> Author: airwin <air...@users.sourceforge.net>
> Date:   Wed May 10 21:24:06 2000 +0000
>
>    Alan W. Irwin.  Logic for changing power of 10 to scale z axes is now
>    consistent between the left and right z axes.
>
> 3. Hazen's first commit?
> $git log | grep hbabcock -A 5 | tail
> [snip]
> Author: hbabcock <hbabc...@users.sourceforge.net>
> Date:   Sun Feb 6 18:25:25 2005 +0000
>
>    Added AquaTerm driver
>
> As an aside, since a git repository is always local this is fast operation. 
> Anyway, it looks like history is all there?

That's a convincing demo!  :-)

>
>
> I provide some (untested) examples of how one might use git below, but I 
> think that the git book really does a great job of explaining things, and it 
> doesn't actually take that long to read the first 3 chapters :).
>
> 1. Basic (SVN like) work:
> git clone https://github.com/HazenBabcock/PLplot.git
> .. work on file1.x ..
> git add file1.x
> git commit -m file1.x
> .. work on file2.x ..
> .. what did I change anyway? ..
> git status
> git add file2.x
> git commit -m file2.x
> .. that was a mistake ..
> git reset HEAD~1
> .. make correction ..
> git add file2.x
> git commit -m file2.x
> git push origin master
> (all the work is local until the changes are pushed back to the remote 
> repository by git push)
>
> 2. Work on a branch:
> .. dev1 ..
> git branch -b epa_build
> .. work on epa_build .. add .. commit ..
> .. push epa_build to a remote repository so that other can evaluate ..
> git push origin epa_build
>
> .. dev2 ..
> git fetch
> git checkout epa_build
> .. tests & agrees that epa_build works well ..
>
> .. dev1 ..
> .. merge epa_build into master ..
> git checkout master
> git merge epa_build
> git push origin master
> .. delete the epa_build branch if it is no longer needed ..
> git branch -d epa_build
>
>
> 3. Work with someone who is not a PLplot developer (this is where I think git 
> really has an advantage):
>
> .. non-dev ..
> git clone dev-repo
> git branch -b go_bindings
> .. work on go_bindings ..
> git push non-dev-repo go_bindings
>
> .. dev1 ..
> git remote add non-dev-repo
> git fetch non-dev-repo
> git checkout go_bindings
> .. see what has been changed in go_bindings compared to master ..
> git diff go_bindings..master
> .. makes some changes, suggests others ..
> git push dev-repo go_bindings
>
> .. non-dev ..
> git fetch dev-repo
> git checkout go_bindings
> git merge dev-repo/go_bindings
> .. implements changes ..
> git push non-dev-repo go_bindings
>
> .. dev1 ..
> git fetch non-dev-repo
> git checkout go_bindings
> git merge non-dev-repo/go_bindings
> .. likes go_bindings ..
> git checkout master
> git merge go_bindings
> git push origin master

Thanks very much for this summary.  It will help me a lot for the
planned timeephemeris conversion to git and should reassure others
here about the effect of doing such a conversion for PLplot.

>
> Where non-dev-repo is a publicly available repository. Note that git makes it 
> much easier for someone who is not a core developer to contribute and it 
> makes it much easier to evaluate the contributions as you don't have to keep 
> swapping and applying patch files and/or both have write access to the same 
> repo.

I think this is a really important point.  I am convinced that 
assuming the current PLplot developers are willing to go along with
moving PLplot from svn to git, that step will attract additional core
developers and also make it easier to collaborate with non-core
developers.  So this would be a classic case of taking advantage of
the power of the "network effect".

> It appears that git does not have a properties feature like SVN, so I don't 
> think there is anything like the SVN prop commands.

The current svn properties we use are (1) svn:keywords (used to update
a special file comment with a new version number when committing); (2)
svn:executable (used to specify if the file is executable), (3)
svn:eol-style (used to specify the kind of line-endings that the
checked-out version will have), and (4) svn:mime-type (used to specify
if the file is a binary file that should remain unmolested (e.g., by
not doing line-ending modification on checkout or keyword substitution
on checkin).

I did some further investigation:

According to
http://stackoverflow.com/questions/2059326/git-equivalent-of-subversions-url-keyword-expansion,
support of svn:keywords is not available with git.  However, the
historical trend is to remove such version specification commentary
from our source code since check-in of a file with such special
commentary changes the file and therefore unnecessarily regenerates
the build after that checkin.  Even if we stayed with svn I would not
mind removing all svn:keywords properties so it is actually a positive
(in my view) that we would be forced to drop them if we converted to
git.

"man git-config" mentions setting up configuration for filesystems
that do not support the executable bit. The implication is that the
git repository stores an execute bit for files, and this is also
stated specificially in
http://stackoverflow.com/questions/7048763/how-to-stop-git-from-making-files-non-executable-on-cygwin
So I think (2) is covered.

According to 
http://stackoverflow.com/questions/2127429/can-i-make-git-svn-handle-svneol-style
and "man git-config" it appears that git supports line ending
conversions so (3) appears to be covered.

Also from my general git background reading, git supports binary blob
files so I think (4) is covered as well.

In sum, I don't think (1) is a showstopper, but care must be used in
the conversion of our svn git repository so that (2) the executable bit is
automatically set for executable files on checkout for those
filesystems that support that, (3) the correct line ending are used for
Unix and Windows systems for non-blob files, and (4) the blob files (such
as www/img/bg.jpg) are properly identified as such to git so
they don't undergo line-ending transformations.

So Hazen, to put these concerns to rest can you check that (2), (3),
and (4) are true for your git repo using a Windows checkout (which I
think has filesystems that do not support the execute permissions bit
and which should certainly have Windows line endings for non-blob
files) and a Linux (or Mac OS X) checkout?

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________

------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to