Is this git handling of a problem on my macports-ports fork&clone OK?

Justin justinvallon at gmail.com
Tue Feb 22 16:14:59 UTC 2022


Personally, I try to make sure that regular-merges are the norm, and 
rebase/reset is the exceptional case.  Once you use rebase, you 
typically need to use force-push, and once you start using force-push 
regularly, it is easy to lose commits because you force push and 
actually lose something on the remote that you didn't incorporate into 
the local push-source.

If you never commit to your local master (or origin/master), it will 
never diverge from upstream/master, and the reset/push --force will not 
be necessary.

I don't think you comments match what is being done:

git checkout master # switch to local branch master
git pull upstream master # fetch upstream master and merge 
upstream/master into current branch
# does not: overwrite my local master with remote upstream/master
git reset --hard upstream/master # move local branch to point to 
upstream/master
git push origin master --force # push master branch back to fork's master
portindex

These instructions would be (kind of) correct if you think the 
origin/master branch or local master branch might diverge from 
upstream/master.  However, even then, you have a pull (which merges), 
then a reset (which discards).  That is, either:

git checkout master ; git pull upstream master ; git push

or:

git checkout master ; git fetch upstream ; git reset --hard 
upstream/master ; git push --force origin master

The reset/force-push is a bit contradictory: the instructions indicate 
that something might have been added to the master branch, but it is 
being discarded.  Why would something be added to the master branch if 
it should not be retained.  Also, why pull (merge) if the next step is 
going to reset --hard.  If the branches have diverged, you might have a 
merge conflict.

The "git push --force" would close an open PR if the PR's branch was 
your master branch (since origin/master and upstream/master are the 
same, the PR would be closed).  Otherwise, I don't see how pushing to 
master would affect PRs on non-master branches.

My approach:

a) Never commit to your fork's master (besides pull from upstream)
b) Always push your changes to fork's branch(es)
c) PRs from fork branch

A periodic "git checkout master && git pull upstream master && git push" 
should keep fork's master branch up-to-date.

As to whether you local git repo is ok:

- Check "git status" does not show anything modified (or not checked in)
- Once you see everything is checked in, "git diff upstream/master" will 
show diffs between local commit
- "git rev-parse HEAD upstream/master" will show the SHAs of you local 
branch and upstream/master.  It seems like you want them to be the same.

-Justin

On 2/19/22 07:59, Gerben Wierda via macports-users wrote:
> I have my own fork&clone of macports-ports in case I want to do 
> maintenance. Getting a clean local clone for me means:
>
> # First, do an update of macports base only (does not update the ports 
> tree):
>
> sudo port selfupdate --no-sync
>
> # Updating the master of my fork&clone from the master of the original:
>
> git checkout master# Go to branch master in my local clone
> git pull upstream master# Update my local clone master from the master 
> of the remote upstream
> # (overwrites my local master with remote github/macports/master)
> git reset --hard upstream/master# Resets index and working tree of 
> local clone/master from remote upstream
> git push origin master --force # Push local clone 
> (~/MacPortsDev/macports-ports) master back
> # to my own remote fork (github/gctwnl/macports-ports)
> # NOTE: this closes all open pull-requests!
> portindex# Tell macports to use this tree and update the macports index
>
> Apparently, in the past UI have accidentally done some of this as 
> root, so this failed because parts of the macports-ports clone were 
> owned by root.
>
> So, I did a chown -R on that tree and tried again, but now I get
>
> albus:macports-ports sysbh$ git pull upstream master
> From https://github.com/macports/macports-ports
>  * branch                    master     -> FETCH_HEAD
> Updating e0a3df02c73..eca5c1226ee
> error: Your local changes to the following files would be overwritten 
> by merge:
> _resources/port1.0/checks/implicit_function_declaration/macosx10.10.sdk.list
> _resources/port1.0/checks/implicit_function_declaration/macosx10.11.sdk.list
>> error: The following untracked working tree files would be overwritten 
> by merge:
> aqua/qt5/files/patch-qtwebengine_gn_binary_path.diff
> comms/s710/files/dynamic_lookup-11.patch
>
> So I tried to do
>
> git reset --hard upstream/master
>
> and apparently this did work as another pull did nothing. But before I 
> push that back to my own clone: have I done anything wrong? Is my 
> local tree in order now?
>
> Gerben Wierda (LinkedIn <https://www.linkedin.com/in/gerbenwierda>)
> R&A IT Strategy <https://ea.rna.nl/> (main site)
> Book: Chess and the Art of Enterprise Architecture 
> <https://ea.rna.nl/the-book/>
> Book: Mastering ArchiMate <https://ea.rna.nl/the-book-edition-iii/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macports.org/pipermail/macports-users/attachments/20220222/508d57bb/attachment.htm>


More information about the macports-users mailing list