> > + test_when_finished "cd .. && rm -rf ./test" && > > Not a very good practice to chdir around, even if you have > when-finished clean-up. Not worth risking "rm -rf" at random > places when for example somebody breaks when-finished. > OK. > Instead... > > > + mkdir test && > > Place everything below ... > > > + cd test && > > + git init && > > + cat >expect <<-\EOF && > > + refs/heads/main > > + EOF > > + git add . && > > + git branch -M main && > > This is in a freshly created repository without commit. Does > "branch -M" work for such an unborn branch? Perhaps start this > block like so: > I think "git branch -M" before "git commit" also will be fine. Of course it's okay to put it after commit and before "test_cmp". > git init test && > ( > cd test && > test_commit initial && > git branch -M main && > cat >expect <<-\EOF && > refs/heads/main > refs/tags/initial > EOF > git remote add origin nowhere && > ... > > > + git commit -m "test" && > > + git remote add origin nowhere && > > + git config branch.main.remote origin && > > + git config branch.main.merge refs/heads/main && > > + git for-each-ref --format="%(color:#aa22ac)%(refname)" >actual && > > + test_cmp expect actual > > ... up to here inside a (subshell). > I get it now. By executing cd in the subshell, the "cd .." step can be omitted. > By the way, your use of "git branch -M" makes the test work whether > the default initial branch name is still 'master' or already 'main' > by forcing the branch used for testing to be 'main'. Clever ;-). > Hh, real knowledge comes from practice. Yesterday, I tried it on the old version of git on some classmates’ computers, and there was an error, so using "git branch -M main" can avoid this error. > Will queue with all of the above suggestions squashed in; please see > if the result is good when it is pushed out later today. > > Thanks. > Thanks! -- ZheNing Hu