Процесс переноса кода - GitHub - Обзор
- Разработчик создает ветку, пишет код и т. Д.
- Разработчик фиксирует ветвь после завершения работы
- Производственная миграция - разработчик делает запрос на извлечение, чтобы вытянуть ветку в master.
- После того, как два утверждения завершены, разработчик может объединить код
- Разработчик объединяет код в master
- Git запускается в рабочей среде для клонирования репозитория из master ... Я пишу пользовательскую программу, использующую JGit для проверки того, что слияние завершено в мастер.
- Код развернут в производство
Проблема:
Я пытаюсь программно проверить, слил ли разработчик свой код в master.Я не могу заставить этот шаг работать.У всех примеров, которые я рассмотрел, есть коммиты ветки и мастера.После этого примеры впоследствии проверяют, зафиксирована ли ветка.Это недопустимый вариант для моей программы, потому что слияние происходит в GitHub после завершения согласований.
Когда я клонирую репозиторий JGit и пытаюсь проверить, была ли объединена другая ветвь, коммит разбора завершается неудачно и возвращает ноль.Обратное также верно, если я клонирую ветвь и проверяю, есть ли у мастера фиксация, он терпит неудачу.Очевидно, что я здесь что-то не так делаю.Пример кода, о котором я говорю:
try( RevWalk revWalk = new RevWalk( repository ) ) {
RevCommit masterHead = revWalk.parseCommit( repository.resolve( "refs/heads/master" );
RevCommit otherHead = revWalk.parseCommit( repository.resolve( "refs/heads/other-branch" );
if( revWalk.isMergedInto( otherHead, masterHead ) ) {
...
}
}
Я также попытался посмотреть на состояние хранилища, но это тоже не работает.Если у кого-то есть идеи, кроме использования инструмента командной строки git, я был бы признателен за помощь.
Разная информация
Java версия 1.7 - это то, что у нас есть.
Версия Jar - org.eclipse.jgit-4.5.4.201711221230-r.jar
Примеры, которые я рассмотрел:
https://gist.github.com/rherrmann/433adb44b3d15ed0f0c7
https://www.codeaffine.com/2015/12/15/getting-started-with-jgit/
Как объединить в JGit?
Как определить с JGit, какие ветви были объединены с мастером?
Мой код
public class GitHubTest
{
public Repository repository;
public GitHubTest()
{
}
public static ArrayList<String> fetchGitBranches(String gitUrl)
{
Collection<Ref> refs;
ArrayList<String> branches = new ArrayList<String>();
try {
refs = Git.lsRemoteRepository().setHeads(true)
.setRemote(gitUrl)
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("token", "not applicable stack exchange"))
.call();
for (Ref ref: refs) {
branches.add(ref.getName().substring(ref.getName().lastIndexOf("/") + 1, ref.getName().length()));
System.out.println(ref.getName());
}
Collections.sort(branches);
} catch (InvalidRemoteException e) {
e.printStackTrace();
} catch (TransportException e) {
e.printStackTrace();
} catch (GitAPIException e) {
e.printStackTrace();
}
return branches;
}
public void getRepositoryCode()
{
try {
Git git =
Git.cloneRepository()
.setURI("https://github.com/FICOCorp/iww-test-create-1552931848516.git")
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("token", "not applicable stack exchange"))
.setBranch("IKE_TEST2")
.setDirectory(new File("C:\\z_git")).call();
} catch (TransportException e) {
e.printStackTrace();
} catch (InvalidRemoteException e) {
e.printStackTrace();
} catch (GitAPIException e) {
e.printStackTrace();
}
}
public void setRespository(String repo)
{
try {
FileRepositoryBuilder builder = new FileRepositoryBuilder();
repository =
builder.findGitDir(new File(repo)).readEnvironment()
.build();
} catch (Exception e) {
e.printStackTrace();
}
}
public void isBranchMerged( String branch)
{
try {
Git git = new Git(repository);
System.out.println("git.getRepository().getFullBranch() ="+git.getRepository().getFullBranch() );
RepositoryState r = git.getRepository().getRepositoryState();
System.out.println("r.canCommit(); =" + r.canCommit());
//System.out.println("r.canCommit(); ="+r. );
if (r == RepositoryState.MERGING) {
System.out.println("RepositoryState.MERGING = Y");
}
else {
System.out.println("RepositoryState.MERGING = N");
}
if (r == RepositoryState.MERGING_RESOLVED) {
System.out.println("RepositoryState.MERGING_RESOLVED = Y");
}
else {
System.out.println("RepositoryState.MERGING_RESOLVED = N");
}
Ref master = repository.findRef("master");
// Get the object the reference points to
ObjectId masterTip = master.getObjectId();
} catch (Exception e) {
e.printStackTrace();
System.out.println( e.getMessage());
}
}
public static void main(String[] args)
{
GitHubTest gitHubTest = new GitHubTest();
gitHubTest.getRepositoryCode();
ArrayList<String> al = gitHubTest.fetchGitBranches("https://github.com/FICOCorp/iww-test-create-1552931848516.git");
for (String s: al) {
System.out.println("Known Branches " + s);
}
//gitHubTest.getRepositoryDetails();
gitHubTest.setRespository("C:\\z_git\\.git");
gitHubTest.isBranchMerged("IKE_TEST2");
//gitHubTest.listUncommittedChanges();
}
}
Снимки экрана