We introduced the option --initial-branch=<branch-name> to allow initializing a new repository with a different initial branch. To allow users to override the initial branch name more permanently (i.e. without having to specify the name manually for each 'git init'), introduce the 'init.defaultBranch' option. This option was added to git in 2.28.0. See https://git-scm.com/docs/git-config#Documentation/git-config.txt-initdefaultBranch Bug: 564794 Change-Id: I679b14057a54cd3d19e44460c4a5bd3a368ec848 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>tags/v5.11.0.202102240950-m3
usage_updateRemoteRefsFromAnotherRepository=Update remote refs from another repository | usage_updateRemoteRefsFromAnotherRepository=Update remote refs from another repository | ||||
usage_useNameInsteadOfOriginToTrackUpstream=use <name> instead of 'origin' to track upstream | usage_useNameInsteadOfOriginToTrackUpstream=use <name> instead of 'origin' to track upstream | ||||
usage_checkoutBranchAfterClone=check out named branch instead of remote's HEAD | usage_checkoutBranchAfterClone=check out named branch instead of remote's HEAD | ||||
usage_initialBranch=initial branch in the newly created repository (default 'master') | |||||
usage_initialBranch=initial branch of the newly created repository (default 'master', can be configured via config option init.defaultBranch) | |||||
usage_viewCommitHistory=View commit history | usage_viewCommitHistory=View commit history | ||||
usage_orphan=Create a new orphan branch. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from other branches and commits. | usage_orphan=Create a new orphan branch. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from other branches and commits. | ||||
usernameFor=Username for {0}: | usernameFor=Username for {0}: |
import org.eclipse.jgit.errors.NoWorkTreeException; | import org.eclipse.jgit.errors.NoWorkTreeException; | ||||
import org.eclipse.jgit.junit.MockSystemReader; | import org.eclipse.jgit.junit.MockSystemReader; | ||||
import org.eclipse.jgit.junit.RepositoryTestCase; | import org.eclipse.jgit.junit.RepositoryTestCase; | ||||
import org.eclipse.jgit.lib.ConfigConstants; | |||||
import org.eclipse.jgit.lib.Constants; | import org.eclipse.jgit.lib.Constants; | ||||
import org.eclipse.jgit.lib.Repository; | import org.eclipse.jgit.lib.Repository; | ||||
import org.eclipse.jgit.lib.StoredConfig; | |||||
import org.eclipse.jgit.util.SystemReader; | import org.eclipse.jgit.util.SystemReader; | ||||
import org.junit.Before; | import org.junit.Before; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
} | } | ||||
} | } | ||||
@Test | |||||
public void testInitRepositoryCustomDefaultBranch() | |||||
throws Exception { | |||||
File directory = createTempDirectory("testInitRepository"); | |||||
InitCommand command = new InitCommand(); | |||||
command.setDirectory(directory); | |||||
MockSystemReader reader = (MockSystemReader) SystemReader.getInstance(); | |||||
StoredConfig c = reader.getUserConfig(); | |||||
String old = c.getString(ConfigConstants.CONFIG_INIT_SECTION, null, | |||||
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH); | |||||
c.setString(ConfigConstants.CONFIG_INIT_SECTION, null, | |||||
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH, "main"); | |||||
try (Git git = command.call()) { | |||||
Repository r = git.getRepository(); | |||||
assertNotNull(r); | |||||
assertEquals("refs/heads/main", r.getFullBranch()); | |||||
} finally { | |||||
c.setString(ConfigConstants.CONFIG_INIT_SECTION, null, | |||||
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH, old); | |||||
} | |||||
} | |||||
@Test | |||||
public void testInitRepositoryNullInitialBranch() throws Exception { | |||||
File directory = createTempDirectory("testInitRepository"); | |||||
InitCommand command = new InitCommand(); | |||||
command.setDirectory(directory); | |||||
command.setInitialBranch("main"); | |||||
command.setInitialBranch(null); | |||||
try (Git git = command.call()) { | |||||
Repository r = git.getRepository(); | |||||
assertNotNull(r); | |||||
assertEquals("refs/heads/master", r.getFullBranch()); | |||||
} | |||||
} | |||||
@Test | |||||
public void testInitRepositoryEmptyInitialBranch() throws Exception { | |||||
File directory = createTempDirectory("testInitRepository"); | |||||
InitCommand command = new InitCommand(); | |||||
command.setDirectory(directory); | |||||
command.setInitialBranch("main"); | |||||
command.setInitialBranch(""); | |||||
try (Git git = command.call()) { | |||||
Repository r = git.getRepository(); | |||||
assertNotNull(r); | |||||
assertEquals("refs/heads/master", r.getFullBranch()); | |||||
} | |||||
} | |||||
@Test | @Test | ||||
public void testInitNonEmptyRepository() throws IOException, | public void testInitNonEmptyRepository() throws IOException, | ||||
JGitInternalException, GitAPIException { | JGitInternalException, GitAPIException { |
import org.eclipse.jgit.api.errors.GitAPIException; | import org.eclipse.jgit.api.errors.GitAPIException; | ||||
import org.eclipse.jgit.api.errors.InvalidRefNameException; | import org.eclipse.jgit.api.errors.InvalidRefNameException; | ||||
import org.eclipse.jgit.api.errors.JGitInternalException; | import org.eclipse.jgit.api.errors.JGitInternalException; | ||||
import org.eclipse.jgit.errors.ConfigInvalidException; | |||||
import org.eclipse.jgit.internal.JGitText; | import org.eclipse.jgit.internal.JGitText; | ||||
import org.eclipse.jgit.lib.ConfigConstants; | |||||
import org.eclipse.jgit.lib.Constants; | import org.eclipse.jgit.lib.Constants; | ||||
import org.eclipse.jgit.lib.Repository; | import org.eclipse.jgit.lib.Repository; | ||||
import org.eclipse.jgit.lib.RepositoryBuilder; | import org.eclipse.jgit.lib.RepositoryBuilder; | ||||
import org.eclipse.jgit.util.FS; | import org.eclipse.jgit.util.FS; | ||||
import org.eclipse.jgit.util.StringUtils; | |||||
import org.eclipse.jgit.util.SystemReader; | import org.eclipse.jgit.util.SystemReader; | ||||
/** | /** | ||||
private FS fs; | private FS fs; | ||||
private String initialBranch = Constants.MASTER; | |||||
private String initialBranch; | |||||
/** | /** | ||||
* {@inheritDoc} | * {@inheritDoc} | ||||
builder.setWorkTree(new File(dStr)); | builder.setWorkTree(new File(dStr)); | ||||
} | } | ||||
} | } | ||||
builder.setInitialBranch(initialBranch); | |||||
builder.setInitialBranch(StringUtils.isEmptyOrNull(initialBranch) | |||||
? SystemReader.getInstance().getUserConfig().getString( | |||||
ConfigConstants.CONFIG_INIT_SECTION, null, | |||||
ConfigConstants.CONFIG_KEY_DEFAULT_BRANCH) | |||||
: initialBranch); | |||||
Repository repository = builder.build(); | Repository repository = builder.build(); | ||||
if (!repository.getObjectDatabase().exists()) | if (!repository.getObjectDatabase().exists()) | ||||
repository.create(bare); | repository.create(bare); | ||||
return new Git(repository, true); | return new Git(repository, true); | ||||
} catch (IOException e) { | |||||
} catch (IOException | ConfigInvalidException e) { | |||||
throw new JGitInternalException(e.getMessage(), e); | throw new JGitInternalException(e.getMessage(), e); | ||||
} | } | ||||
} | } |
*/ | */ | ||||
public static final String CONFIG_KEY_VERSION = "version"; | public static final String CONFIG_KEY_VERSION = "version"; | ||||
/** | |||||
* The "init" section | |||||
* | |||||
* @since 5.11 | |||||
*/ | |||||
public static final String CONFIG_INIT_SECTION = "init"; | |||||
/** | |||||
* The "defaultBranch" key | |||||
* | |||||
* @since 5.11 | |||||
*/ | |||||
public static final String CONFIG_KEY_DEFAULT_BRANCH = "defaultbranch"; | |||||
} | } |