Re: Phabricator workflow with Git

From: Warner Losh <imp_at_bsdimp.com>
Date: Sat, 28 Aug 2021 22:04:38 UTC
On Sat, Aug 28, 2021 at 3:48 PM Danilo G. Baio <dbaio@freebsd.org> wrote:

> On Sat, Aug 28, 2021 at 03:02:00PM -0600, Warner Losh wrote:
> > Wow! That's convoluted.
>
> /me hides
>

Sorry, I guess I wasn't as kind at pointing out improvements to this as I
could have been.
Sorry about that.

Warner


> >
> > On Sat, Aug 28, 2021 at 2:44 PM Danilo G. Baio <dbaio@freebsd.org>
> wrote:
> >
> > > Hi.
> > >
> > > I'm currently using this workflow:
> > >
> > > - - - - - - - - - - - - - - - - - - - - - - - - -
> > >
> > > // Create a new branch
> > > $ git checkout -b FEATURE
> > >
> > > // Change stuff and git commit
> > > // Note that you already can include the Review information in
> > > // Phabricator format.
> > >
> > > ```
> > >   <<Replace this line with your Revision Title>>
> > >
> > >   Summary:
> > >
> > >   Test Plan:
> > >
> > >   Reviewers:
> > >
> > >   Subscribers:
> > > ```
> > >
> > > // Open a review with the first commit
> > > $ arc diff --create HEAD~
> > >
> > >
> > > // If it's accepted, fix the commit log message, rebase with main
> > > // branch, and push
> > >
> >
> > All that's replaced by 'git arc create HEAD'
> >
> >
> > > $ git commit --amend
> > > $ git rebase -i main
> > > $ git push remote_name FEATURE:main
> > >
> >
> > git arc stage. This also takes care of adding differential revision, etc.
> >
> > will stage it into main, then you can just 'git push freebsd' to put it
> in
> > the the tree.
> >
> >
> > > // If it's NOT accepted
> > > // Change stuff and add a second git commit
> > >
> > > // Update review with the two commits
> > > $ arc diff --update DXXXXX HEAD~2
> > >
> >
> > git arc update <commits>
> >
> > does this automatically.
> >
> >
> > > // If it's accepted, you can soft reset both commits and do a new one
> > > // or, just use `git merge and squash`.
> > >
> > > // merge/squash way
> > > // Set the second commit to be squashed
> > >
> > > $ git rebase -i main
> > >
> > > ```
> > >   pick   954c5d4626 Readme: First commit
> > >   squash 7231873f23 Makefile: Second commit
> > > ```
> > >
> > > or
> > >
> > > $ git reset --soft HEAD~2
> > > // And add a final commit
> > >
> >
> > I'd document only rebase. The git reset workflow is somewhat more
> dangerous
> > and error-prone.
> >
> > // Submit
> > > $ git push remote_name FEATURE:main
> > >
> >
> > git arc stage
> > git push
> >
> > is what I use, but I know lots of people like the branch:main notation.
> > It's harder to use, though when you lose the race. If you stage on main,
> > then git pull --rebase will do the right thing in one step rather than
> > several.
> >
> >
> > > // Delete FEATURE branch
> > >
> > > $ git checkout main
> > > $ git pull origin main --no-ff
> > >
> >
> > --ff-only don't you mean? You *NEVER* want a non-ff pull with upstream.
> > Ever. It leads to great evil and lost changes.
> >
>
>
> Yes, sorry.
>
> >
> > > $ git branch -d FEATURE
> > >
> >
> > Yea, this is what I use, but I have a script that does this over all the
> > branches....
> >
> >
> > > I know there are git-arc (tools/tools/git-arc) on base, but I still
> > > didn't use it.
> > >
> >
> > We should only document it, since it hides all this ugliness and makes
> > things easier, less tedious and less error-prone.
> >
> >
> > > I just want to check if there are other ways to do that (that you
> > > recommend), or if can I document it, at least for now, on our
> > > Phabricator Wiki page [1].
> > >
> > >
> > > 1 - https://wiki.freebsd.org/Phabricator
> >
> >
> > While you can document what you've said, I found it somewhat confusing to
> > follow, especially relative
> > to git arc.
> >
> > Warner
>
>
>
> Glad that I sent this message here.
>
> So, I'll test/use `git arc`.
>
> Is there anything written about it elsewhere?
>
> Thank you for the prompt reply and the tips.
>
> Regards.
> --
> Danilo G. Baio (dbaio)
>