ports and git, first steps

Ulrich Spörlein uqs at freebsd.org
Thu Mar 4 12:13:38 UTC 2021


On Wed, 2021-03-03 at 16:10:15 +0100, Michael Grimm wrote:
>[CC'd to freebsd-questions]
>
>Ulrich Spörlein <uqs at FreeBSD.org> wrote:
>> On Tue, 2021-03-02 at 13:23:56 +0100, Michael Grimm wrote:
>
>>> I am running STABLE-13 and use poudriere (svn+https) to compile my ports of interest.
>>>
>>> Disclaimer: I do consider myself a newbie with regard to git.
>>>
>>> After my migration from svn to git regarding sources, I recently installed a git repository for ports sources. It is working as expected, good.
>>>
>>> But then I added some local ports to the ports directory, which I added to .git/info/exclude. Ok, that worked out.
>>>
>>> Now I had had to modify the Makefile of www/wordpress like I did before in the svn ports tree. Now git complained:
>>>
>>> 	mwn> git status
>>> 	On branch master
>>> 	Your branch is up to date with 'origin/master'.
>>>
>>> 	Changes not staged for commit:
>>> 	  (use "git add <file>..." to update what will be committed)
>>> 	  (use "git restore <file>..." to discard changes in working directory)
>>> 		modified:   www/wordpress/Makefile
>>>
>>> 	It took 3.44 seconds to enumerate untracked files. 'status -uno'
>>> 	may speed it up, but you have to be careful not to forget to add
>>> 	new files yourself (see 'git help status').
>>> 	no changes added to commit (use "git add" and/or "git commit -a")
>>>
>>> Thus I applied 'git commit':
>>>
>>> 	mwn> git commit -a -m "modified to compile wordpress without llvm"
>>> 	[master 39b5d0652] modified to compile wordpress without llvm
>>> 	 Committer: admin mer-waases.net <root at mer-waases.net>
>>> 	Your name and email address were configured automatically based
>>> 	on your username and hostname. Please check that they are accurate.
>>> 	You can suppress this message by setting them explicitly. Run the
>>> 	following command and follow the instructions in your editor to edit
>>> 	your configuration file:
>>>
>>> 	    git config --global —edit
>>>
>>> 	After doing this, you may fix the identity used for this commit with:
>>>
>>>   git commit --amend --reset-author
>>> 	
>>> 	 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> Now, 'git status' shows:
>>>
>>> 	mwn> git status
>>> 	On branch master
>>> 	Your branch is ahead of 'origin/master' by 1 commit.
>>> 	  (use "git push" to publish your local commits)
>>>
>>>
>>> 	It took 3.17 seconds to enumerate untracked files. 'status -uno'
>>> 	may speed it up, but you have to be careful not to forget to add
>>> 	new files yourself (see 'git help status').
>>> 	nothing to commit, working tree clean
>>>
>>> Well, that looks fine for a git newbie, But there are some questions left for me:
>>>
>>> 1) Will my commited Makefile become overwritten if the master Makefile becomes modified in the future? (I hope so)
>>
>> No, due to how I think (!) poudriere works, your change should remain.
>>
>>> 2) Will all upcoming modifications in 'remote.origin.url=git://github.com/freebsd/freebsd-ports.git' be pulled,
>>>  although 'Your branch is ahead of 'origin/master' by 1 commit.'?
>>
>> I think poudriere does a `git pull --rebase` always, which fetches upstream and then rebases your changes on top. So your local changes will always be there, but they can of course come into conflict with upstream changes at which point you'll need to resolve those conflicts.
>
>Does anyone know if poudriere is using 'git pull —rebase' as default?

It's just a bunch of shell scripts, so easy to check:

% git grep GIT_CMD
src/share/poudriere/common.sh:: ${GIT_CMD:=git}
src/share/poudriere/jail.sh:                    ${GIT_CMD} clone ${GIT_DEPTH} -q -b ${VERSION} ${GIT_FULLURL} ${SRC_BASE} || err 1 " fail"
src/share/poudriere/jail.sh:                    ${GIT_CMD} -C ${SRC_BASE} pull --rebase -q || err 1 " fail"
src/share/poudriere/jail.sh:                            ${GIT_CMD} checkout -q "${TORELEASE}" || err 1 " fail"
src/share/poudriere/jail.sh:            git_sha=$(${GIT_CMD} -C ${SRC_BASE} rev-parse --short HEAD)
src/share/poudriere/ports.sh:                   ${GIT_CMD} clone --depth=1 --single-branch ${quiet} -b ${BRANCH} ${GIT_FULLURL} ${PTMNT} || err 1 " fail"
src/share/poudriere/ports.sh:           ${GIT_CMD} -C ${PORTSMNT:-${PTMNT}} pull --rebase ${quiet}


Besides, `git pull --rebase` is pretty much the only sane choice for 
poudriere anyway.

Cheers
Uli


More information about the freebsd-questions mailing list