On 27 November 2013 13:37, Luc Maisonobe <l...@spaceroots.org> wrote:
> Le 27/11/2013 13:47, Gilles a écrit :
>> On Wed, 27 Nov 2013 12:44:27 +0100, Emmanuel Bourg wrote:
>>> Le 27/11/2013 12:13, Gilles a écrit :
>>>
>>>> I'm only a bit worried about the timing, and whether knowledgeable
>>>> people will be willing to detail the move and explain what to do to
>>>> so that the total ignorant can indeed continue contributing "à la
>>>> svn"[1]
>>>> until he finds the time to study the more advanced features.
>
> In addition to the commands Emmanual wrote down below, I confirm I am OK
> to help people on the list with Git.
>
>>>
>>> If you don't apply a fancy branch model Git can be used just like
>>> Subversion
>>>
>>> Checkout:
>>>
>>>    git clone <url>
>>>
>>> Commit all changes:
>>>
>>>    git commit -a
>>>    git push
>>>
>>> Update from the repository:
>>>
>>>    git pull
>>
>> Quite clear up to here.
>>
>>>
>>> The one thing Git doesn't do as well as Subversion is merging the local
>>> changes with the remote changes when updating the local copy. He will
>>> refuse to update the local copy if there are conflicting changes. In
>>> this case you either have to commit your local modifications, or stash
>>> them before updating. You can then resolve the conflicts as usual.
>>>
>>>    git stash
>>>    git pull
>>>    git stash pop
>>
>> What is "stash", what is "stash pop"?
>
> Stashing is a feature that allows to temporarily save the current work
> without commiting it. Suppose you have started to work on files a, b and
> c and then want to update your workspace from the reference remote
> repository. If another developer did change something on file b, it will
> be easier for future work to do "as if" the remote change was done
> first, and then your own work was done on top of it. So in order to do
> this, you would like to first put aside your change, then get in sync
> with the remote repo, then replay your changes. This is what the "git
> stash" and "git stash pop" will do.
>
> In fact, the stash can contain any number of temporary changes, and you
> can push them on the list or replay them in any order, or replay only
> some of them and not the other ones if they are not ready. I would not
> recommend this practice, though. If you work on several things at the
> same time, using local branches is much easier.
>
>>
>> You see, from my zero knowledge, I infer from a previous post that some
>> non-committer contributor can provide an "outdated" patch, and I, as a
>> committer, should still be able to commit it (i.e. without asking him
>> to update the patch with the newer trunk). How? On what condition is it
>> possible, and when does that approach become impossible?
>
> In git, each commit holds a reference to the previous state.
>
> Consider the commit history on a reference Apache repository, it may
> look like (old version on top, recent versions on bottom):
>
>   Aapache
>      |
>   Bapache
>      |
>   Capache
>      |
>   Dapache
>
> At this point, a contributor clones the reference repository, does some
> local commits. His own repository will contains this history:
>
>   Aapache
>      |
>   Bapache
>      |
>   Capache
>      |
>   Dapache
>      |
>   Econtrib
>      |
>   Fcontrib
>      |
>   Gcontrib
>
> Then he proposes his contribution to the project, for example using a
> "pull request" in public services like github. At this point, the
> history of the reference Apache repository will have already changed and
> looked as follows:
>
>   Aapache
>      |
>   Bapache
>      |
>   Capache
>      |
>   Dapache
>      |
>   Hapache
>      |
>   Iapache
>
> The Apache committers locates the contributor repository on github or
> elsewhere, and runs "git pull" in his own workspace. He will then grab
> the full history of the contributor work and will get this history in
> his local repository
>
>   Aapache
>      |
>   Bapache
>      |
>   Capache
>      |
>   Dapache
>      |---------------|
>   Hapache         Econtrib
>      |               |
>   Iapache         Fcontrib
>                      |
>                   Gcontrib
>
> All intermediates state are redily accessible and the committer can
> decide what to do. He can merge everything, merge only parts, rely on
> git diff to show up the differences even between commits that do not
> belong to the same path. If there is no conflict, it is possible from
> this state to do a single "git merge" and push it to the reference
> repository. In this case, the reference repository history will become:
>
>   Aapache
>      |
>   Bapache
>      |
>   Capache
>      |
>   Dapache
>      |---------------|
>   Hapache         Econtrib
>      |               |
>   Iapache         Fcontrib
>      |               |
>      |            Gcontrib
>      |---------------|
>              |
>            Jmerged
>
>>
>> So I could say that the "limitations" of the current system have the
>> good consequence that contributors and committers are _obliged_ to work
>> together. [E.g. the contributor of an old patch must stick around or,
>> if he didn't, that could hint that it could be "risky" to commit a
>> (non-trivial) code with nobody to maintain it.]
>
> If the committer prefers, of course in this case he can ask the
> contributor to do the merge by himself. This is however also simpler for
> the contributer as he does not have to fiddle with loose file. He will
> be able to do the exact same command the developer would have run (i.e.
> git merge in this case), resolve the conflicts, and then ask again for
> the pull request, but this time providinf Jmerged and not Gcontrib to
> the project.
>
>> Thus, IIUC, in the new system the committers will somehow be expected to do
>> more work, since Git makes it possible to "easily" integrate/merge (?)
>> individual repositories.
>
> No, they can ask contributors to do it. All repositories are equal, so
> running the git merge can be run by the committer or the contributor.
> The important thing is that at the end only the committer as the write
> access that allow him to "git push" to the Apache reference repository.
>
>>
>>> This is enough to get started. You can then learn gradually how to play
>>> with branches, tags, remotes.
>>
>> Gradually?
>> That's my fear (and problem). I should be able to prepare a release by
>> simply following the (updated) recipe in "doc/release/release.howto.txt",
>> i.e. without any assumption which a seasoned Git-user would consider
>> trivial.
>
> If we adopt git, of course the seasoned Git-user (read luc) would update
> the necessary parts in this howto.

Would it be possible to create a generic Git doc that could be used by
any component?
That would be best done in advance of starting to use Git.

> best regards,
> Luc
>
>>
>>
>> Thanks,
>> Gilles
>>
>> [1] Describing one and only one fail-safe way.
>>
>>>
>>> http://git-scm.com/book
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to