jgit pull 问题 HEAD DETACHED

问题描述 投票:0回答:1

我正在尝试使用 JGit 从 git 存储库中提取更改。

当我拉动时,我遇到了 HEAD DETACHED 错误的小问题

我已经在 StackOverflow 上阅读了其他答案。尝试这些解决方案似乎没有帮助。

我有2个远程分支机构

  1. 分期
  2. 大师

这是示例代码:

public static void main(String[] args) {
    final String GIT_STR = "https://github.com/newlifer2/testNewLiferRepo.git";
    final String localRepositoryPath = new File("").getAbsolutePath() + File.separatorChar;

    try {
        //setting up local repository as just testNewLiferRepo
        String repoName = localRepositoryPath + "testNewLiferRepo";
        File f = new File(repoName);
        Repository localRepo = new FileRepository(repoName + File.separatorChar + ".git");
        ObjectId oldObjid = null;
        Git git = null;
        if (f.exists()) {
            oldObjid = localRepo.resolve(Constants.HEAD);
            git = Git.open(f);
            git.pull().call();
            ObjectId currentObjid = localRepo.resolve(Constants.HEAD);
            git.getRepository().close();
        } else {
            git = Git.cloneRepository().setURI(GIT_STR).setDirectory(new File(repoName)).call();
            ObjectId currentObjid = localRepo.resolve(Constants.HEAD);
            if (!localRepo.getBranch().equalsIgnoreCase("staging")) {
                git.checkout().setName("refs/remotes/origin/staging").setForce(true).call();
            }
            git.getRepository().close();
        }
    } catch (InvalidRemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TransportException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (GitAPIException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (RevisionSyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (AmbiguousObjectException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IncorrectObjectTypeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

您可以更新存储库上的 testXML 文件中的版本来测试拉取。

任何指点都将受到高度赞赏

谢谢

java jgit
1个回答
0
投票

看来我的说法改变了。这是一个新的解决方案


public static void main(String [] args){
    final String GIT_STR = "https://github.com/newlifer2/testNewLiferRepo.git";
    final String localRepositoryPath = new File("").getAbsolutePath() + File.separatorChar;

    SSHSessionFactory sessionFactory = new SSHSessionFactory();
    sessionFactory.Initialize();
    SshSessionFactory.setInstance(sessionFactory);
    try{
        //setting up local repository as just testNewLiferRepo
        String repoName = localRepositoryPath + "testNewLiferRepo";
        File f = new File(repoName);
        Repository localRepo = new FileRepository(repoName + File.separatorChar + ".git");
        ObjectId oldObjid = null;
        Git git = null;
        if (f.exists()) {
            oldObjid = localRepo.resolve(Constants.HEAD);
            git = Git.open(f);
            Map<String,Ref> m = git.getRepository().getAllRefs();
            System.out.println("Current Branch: "+git.getRepository().getBranch());
            if(git.getRepository().isValidRefName("refs/remotes/origin/staging")){
                System.out.println("Valid");
            }
            git.pull().call();
            git.checkout().setName("staging").call();
            ObjectId currentObjid = localRepo.resolve(Constants.HEAD);

            git.getRepository().close();
        } else {
            git = Git.cloneRepository().setURI(GIT_STR).setDirectory(new File(repoName)).call();
            ObjectId currentObjid =localRepo.resolve(Constants.HEAD);
            if(!localRepo.getBranch().equalsIgnoreCase("staging")){
                git.branchCreate().setForce(true).setName("staging").setStartPoint("refs/remotes/origin/staging").call();
            }
            git.checkout().setName("staging").call();
            git.getRepository().close();
        }
    } catch (InvalidRemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TransportException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (GitAPIException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (RevisionSyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (AmbiguousObjectException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IncorrectObjectTypeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.