On 2017-05-24 12:46, Mark Morgan Lloyd wrote:
 >   [reportdesigner (reportdesigner)]$ git describe
 >   v1.4.1-787-g45f932c1
 >
 > What does that output tell me:
 >   * Whatever code I'm working on is follow on from the "v1.4.1"
 >     release.
 >   * This line of [development] history has seen "787" commits
 >     since the v1.4.1 release.

says explicitly that the modification with the hash g45f932c1 takes the
project on the Git repository under consideration to something that
could usefully be described as v1.4.1-787, and you can use that in
conversation without having to be online to a repository.

Yes, you can use "v1.4.1-787" to describe a specific point in history, but the far more common and useful one is the "45f932c1" SHA1 reference, because the latter can be used directly in all Git commands.


If multiple people were committing directly to the same repository (I
presume Git supports that)

Yes.

 presumably they'd see a consistent sequence
of version identifiers, i.e. very much like Subversion.

Yes. A SHA1 reference like "45f932c1" only only points to a specific commit, it also describes the history that lead to that point.

Let me explain: Say you have two branches with the same file, and the file hasn't actually changed between those two branches. Now say I give you a patch file to apply to that file in both branches. The commits that gets generated in each branch - even though the diff is identical - will not have the same SHA1 reference. Because the history to get to that point has diverged because of the branching.

So if I mention a problem in the "45f932c1" commit of a Git repository. No matter how many clones [by multiple developers] there are of that repository, that SHA1 reference will point to the exact commit and code change - in all the Git repositories out there in the wild.

This is also one of the huge arguments about NOT using the git-rebase command on a branch that has been published, because a rebase command rewrites the history. So every commit (SHA1 reference) in that affected branch changes. Rebasing local branches (not made public yet) is obviously not a problem.

The Git project repo has a "short lived" branch where they do all kinds of testing. They explicitly note that nobody should base any new development on that branch, because it will frequently be destroyed and recreated (merging in new feature to be tested for the next cycle).


What happens in the case where there's multiple repositories?

No difference. A git repo contains the full history. If you clone that repository 100 times between developers, you effectively have a 100 backups. If the original repo had 5 branches, all 100 clones with have references (and full history) to those 5 branches too. Such remote branch can be listed using the following command:

  git branch -r

eg:

[tiopf (tiopf2)]$ git branch -r
  carlo_marona/Add_tiLogToDebugString
  carlo_marona/Additional_Mediators
  carlo_marona/Fix_BOOLEAN_Defines
  carlo_marona/Fix_TtiDatabaseZeosAbs_SetConnected_Except
  carlo_marona/Fix_tiCriteria_AssignClassProps
  carlo_marona/Fix_tiMediatorView
  carlo_marona/Fix_tiModelMediator
  carlo_marona/Fix_tiQueryZeosIBFB_Unit
  carlo_marona/tiOIDManager_Update
  carlo_marona/tiopf3
  github/master
  github/tiopf1
  github/tiopf2
  github/tiopf3
  sourceforge/HEAD -> sourceforge/master
  sourceforge/fea_Fix_Event_Execution_Of_TtiPropertyLinkDef
  sourceforge/fea_Missed_Changes_On_tiOPF3
  sourceforge/master
  sourceforge/tiopf1
  sourceforge/tiopf2
  sourceforge/tiopf3


Here you can see my local tiOPF repository has 3 remote repositories defined. "carlo_marona", "github" and "sourceforge". I frequently pull fixes from Carlo, so that is why I have a permanent remote repository link to his published work. For contributions from one-off developers I don't bother setting up a remote repository link - I use their repository URL directly in the git-fetch command.

The official public tiOPF repository lives on SourceForge.net, so that is the "sourceforge" remote repo link. The "github" link was just a backup public repo I used while SourceForge.net had a major global outage a little while ago. So development continued as usage without skipping a beat (thanks Git).

You can also see from Carlo's repository that he nicely names each branch, and every branch that is a bug fix has the prefix name "Fix_" to it. In the end you can name branches whatever you want though, and you can even groups things with a "/" in the name of the branch.







Regards,
  Graeme

--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/

My public PGP key:  http://tinyurl.com/graeme-pgp
_______________________________________________
fpc-other maillist  -  fpc-other@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-other

Reply via email to