Git: Difference between revisions

From Mu2eWiki
Jump to navigation Jump to search
(Replaced content with " This page is obsolete, please see GitHubWorkflow")
Tag: Replaced
 
(61 intermediate revisions by 5 users not shown)
Line 1: Line 1:


==Introduction==
This page is obsolete, please see [[GitHubWorkflow]]
The primary source code management system for the Mu2e Offline software is a [http://git-scm.com/ git] repository that is hosted on the Fermilab [https://cdcvs.fnal.gov/redmine Redmine] site.  Git is a popular open-source software version control system and Redmine is a software project management system which contains, for each project, a log, a wiki (which may contain useful info), and possibly gantt charts and bug tracking along with the git respositories.
 
Based on the git repository's url, you can check out code, and, if you are a code developer, check in modifications. 
'''NB''', when committing code, please follow these [[#gitCommit|mu2e conventions]] only.  Git also has capabilities for tagging code, tracking history and supports splitting off and merging development branches, among many other features.
 
Some older parts of Mu2e software is managed using [https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Revision_Control_Systems other source code management systems].  Some code, both critical and specialized, is in other, smaller repositories.  See [[#Repositories|Repositories]] below for more details on repositories.
 
See [[#References|the references]] for more details on Redmine and git.
 
==Quick Start==
Please also see the basic [[CodeRecipe|code recipe]] for an introduction to setting up the environment, checking out code and building.
 
If you are going to commit anything, you must understand and follow the [[#gitCommits|mu2e commit instructions]]
 
If this is the first time you are using git in the mu2e environment, please follow the few steps listed [https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Introduction_to_git here under "Configure git"] in order to set up your ~.gitconfig.
 
A more detailed introduction to mu2e repositories is [https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Revision_Control_Systems mu2e here].
 
* checkout the main repository
** readonly: <pre>git clone http://cdcvs.fnal.gov/projects/mu2eofflinesoftwaremu2eoffline/Offline.git</pre>
** with kerberos authentication for committing code <pre>git clone ssh://p-mu2eofflinesoftwaremu2eoffline@cdcvs.fnal.gov/cvs/projects/mu2eofflinesoftwaremu2eoffline/Offline.git</pre>
* checkout the head to a local working branch, here named "work" (recommended)
<pre>git checkout -b work</pre>
* see the history of a file
<pre>git log fileSpec</pre>
* list tags
<pre>git tag -l</pre>
* checkout a tag or branch into the working area
<pre>git checkout tagOrBranchName </pre>
* update the local repository
<pre>git fetch</pre>
* update the local repository and checkout the head into the working area
<pre>git pull</pre>
* see what the status is
<pre>git status</pre>
* command line help
<pre>git status help</pre>
* git browser (to see a graphical history of commits)
<pre>gitk --all</pre>
 
 
Please see the references below or many web resources for details on git concepts, commands and features.
If you are going to commit anything, you must understand and follow the [[#gitCommits|commit workflows]].
 
<div id="gitCommits">
 
==Workflows for committing code==
 
We are using two workflows when changed need to be committed back to the repository.
 
* [[GitMinorWorkflow|Minor development]], or "hot fix". This is for small changes, such as changing fcl parameters, fixing bugs, adding minor features, or starting a new module. These modifications are committed directly to the head and should leave the head in a state that compiles and runs.  There should be no branch visible afterwards. The changes should not require any special warning to users.  This pattern is copied from [https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Git_Workflow_for_Mu2e mu2e commit instructions the original redmine page].
 
* [[GitMajorWorkflow|Major development]]. This is intended for development which will take more than a day or, perhaps up to months, and may involve multiple contributors and validators, or should be documented in the git repository for some time.  They may also mark breaking changes, or need to be coordinated with product changes, other branches, or tags.  Currently we plan to leave these branches visible in the repository until they are no longer of interest, at which time they may be archived so as to not clutter the repo forever.
 
==Repositories==
 
One important piece of the mu2e offline code is the [[BTrk]] UPS product, which contains our Kalman track fit code, and is stored in the [https://github.com/KFTrack/BTrk BTrk github repo]. 
 
All of the rest of the mu2e Offline code and tools are in Redmine repositories.
You can browse [https://cdcvs.fnal.gov/redmine/projects all Redmine projects] and
[https://cdcvs.fnal.gov/redmine/projects/mu2e mu2e Redmine].  The mu2e Redmine has subprojects (and sub-subprojects) and each has a repository associated with them.  For example in the [https://cdcvs.fnal.gov/redmine/projects/standalone Standalone] subproject, there is a sub-subproject '''[https://cdcvs.fnal.gov/redmine/projects/mu2eccfc Mu2eCCFC]'''. In addition, the main mu2e Offline repository has sub-repositories which can be seen on the right sidebar menu on the repository [https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/repository main page].  An example is the '''dhtools''' sub-repo.
 
Here is a (possibly incomplete) list of the repositories.
 
{|style="width: 100%"
|-
|style="width:20%"|'''content'''
|style="width:30%"|'''user'''
|style="width:35%"|'''name'''
|style="width:15%"|'''alias'''
|-
|-
|  || p-mu2e_artdaq || mu2e_artdaq ||
|-
|  || p-mu2e_artdaq || mu2e_artdaq-core ||
|-
| [https://cdcvs.fnal.gov/redmine/projects/mu2eccfc F-C limit setting] || p-mu2eccfc || mu2eccfc-mu2eccfc || mu2eccfc.git
|-
|  || p-mu2e-daq-firmware || mu2e-daq-firmware ||
|-
|  || p-mu2e-daq-firmware || mu2e-daq-firmware-dtc ||
|-
|  || p-mu2e-dcs || mu2e-dcs ||
|-
|  || p-mu2e_detector_construction_db || mu2e_detector_construction_db ||
|-
| [[MCProdWorkflow|grid tools]]  || p-mu2egrid || mu2egrid ||
|-
| Offline || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline || Offline.git
|-
| [[Jenkins]]  || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline-codetools || codetools.git
|-
| [[DataTransfer|data handling]] || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline-dhtools || dhtools.git
|-
|  || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline-geomdisplay || geomdisplay.git
|-
| satellite releases  || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline-satellite ||
|-
|  || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline-test ||
|-
| ''obsolete''  || p-mu2eofflinesoftwaremu2eoffline || mu2eofflinesoftwaremu2eoffline-validation || validation.git
|-
| Stntuple framework || p-mu2eofflinesoftwarestntuple || mu2eofflinesoftwarestntuple || Stntuple.git
|-
|  || p-mu2eofflinesoftwareuser || mu2eofflinesoftwareuser-betasource || betasource.git
|-
|  || p-mu2eofflinesoftwareuser || mu2eofflinesoftwareuser-example01 || example01.git
|-
|  || p-mu2eofflinesoftwareuser || mu2eofflinesoftwareuser-streamline ||
|-
|  || p-mu2epbarmodels || mu2epbarmodels ||
|-
|  || p-mu2e-raw-data || mu2e-raw-data ||
|-
| || p-mu2e-tools || mu2e-tools-bintools || mu2ebintools
|-
|[[FileTools]]  || p-mu2e-tools || mu2e-tools-filetools || mu2efiletools
|-
| [[FileTools]] || p-mu2e-tools || mu2e-tools-mu2efilename || mu2efilename
|-
| [[GenerateFcl|generate_fcl]]  || p-mu2e-tools || mu2e-tools-tools || mu2etools
|}
 
Creating a Redmine subproject is done by the "add subproject" button on the Redmine project web page.
Creating a sub-repository associated to the main offline repo is explained in the
[https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Making_a_git_repository_in_redmine mu2e instructions] and
[https://cdcvs.fnal.gov/redmine/projects/fermi-redmine/wiki/CreatingRepositories SCD instructions].
Write privileges to each repository can be controlled by the <code>.k5login</code> contents of each group username associated with the repo - note that this file should be edited by the Redmine project web page (settings->members), not directly.  The login to the group account is controlled by the <code>.admin</code> file.
 
A git repository is accessed through a url and the url can be read-only or read/write, which allows commits back to the repo.
Taking values from the table of Redmine repos above, a repo without an alias will have read-only and read/write urls:
<nowiki>http://cdcvs.fnal.gov/projects/</nowiki>'''name'''
ssh://'''user'''@cdcvs.fnal.gov/cvs/projects/'''name'''
and if it has an alias:
<nowiki>http://cdcvs.fnal.gov/projects/</nowiki>'''name'''/'''alias'''
ssh://'''user'''@cdcvs.fnal.gov/cvs/projects/'''name'''/'''alias'''
 
==References==
*[https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Revision_Control_Systems mu2e git and CVS]
*[https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki/Git_Workflow_for_Mu2e mu2e git commit instructions]
*[http://git-scm.com/ git home]  [http://git-scm.com/doc  Documentation] [https://git-scm.com/docs reference]
*[https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/repository redmine repository browser]
*[https://cdcvs.fnal.gov/redmine Fermilab redmine]
*[http://mu2e-docdb.fnal.gov:8080/cgi-bin/ShowDocument?docid=4527Andrei's talk] at the Software and Simulation Meeting, Sept 17, 2014.
*[https://cdcvs.fnal.gov/redmine/projects/cet-is-public/wiki/Marc's_suggested_git_workflow Marc P's suggested git workflow] for simple git projects
*[https://cdcvs.fnal.gov/redmine/projects/fermi-redmine/wiki/GitWorkshop Fermilab git workshop] and related materials
*[https://cdcvs.fnal.gov/redmine/projects/mu2eofflinesoftwaremu2eoffline/wiki managing and creating] new redmine repositories
 
[[Category:Computing]]
[[Category:Code]]
[[Category:CodeManagement]]

Latest revision as of 20:11, 13 May 2021

This page is obsolete, please see GitHubWorkflow