我们有两个单独的GitHub实例在运行。一个GitHub实例是https://github.dev.host.com
,其他github实例是https://github.host.com
。我在https://github.dev.host.com
中有各种存储库,我需要迁移到这个新的github实例https://github.host.com
。
我正在使用JGit,因为我正在使用Java。例如 - 以下是https://github.dev.host.com
实例中存在的存储库,我需要将其迁移到新的github实例https://github.host.com
https://github.dev.host.com/Database/ClientService
https://github.dev.host.com/Database/Interest
当我使用JGit时,我想通过Java代码在我的新GitHub实例中创建这两个上面的存储库。在运行我的Java代码之后,我应该看到所有上述存储库及其https://github.dev.host.com
中的所有分支和内容到我的新Github实例https://github.host.com
中,如下所示:
https://github.host.com/Database/ClientService
https://github.host.com/Database/Interest
我只需要迭代我在旧github实例中的所有存储库列表,如果他们不在我的新github实例中退出其所有内容和分支,则创建它们。如果它们已经存在,则覆盖从旧实例到新实例的所有更改。
使用JGit可以做到这一点吗?我还通过用户名和密码https
访问了我的两个github实例。
截至目前,我只能做以下所示的基本内容,这是我通过本教程学到的。
public class CreateNewRepository {
public static void main(String[] args) throws IOException {
// prepare a new folder
File localPath = File.createTempFile("TestGitRepository", "");
localPath.delete();
// create the directory
Repository repository = FileRepositoryBuilder.create(new File(localPath, ".git"));
repository.create();
System.out.println("Having repository: " + repository.getDirectory());
repository.close();
FileUtils.deleteDirectory(localPath);
}
}
任何建议都会有很大的帮助,因为这是我第一次使用JGit。
答案 0 :(得分:2)
一种可行的方法是将repositoy从源服务器克隆到临时位置,然后将其推送到目标服务器。
您可以使用JGit克隆存储库,如下所示:
Git.cloneRepository()
.setCredentialsProvider( new UsernamePasswordCredentialsProvider( "user", "password" ) );
.setURI( remoteRepoUrl )
.setDirectory( localDirectory )
.setCloneAllBranches( true )
.call();
要将刚刚克隆的存储库传输到目标,您必须首先在目标服务器上创建存储库。 JGit和Git都不支持这一步。 GitHub提供了一个REST API,可以让您create repositories。 developer pages还列出了此API中可用于Java的语言绑定。
一旦(空)存储库存在,您就可以从临时副本推送到远程:
Git git = Git.open( localDirectory );
git.push()
.setCredentialsProvider( new UsernamePasswordCredentialsProvider( "user", "password" ) );
.setRemote( newRemoteRepoUrl )
.setForce( true )
.setPushAll()
.setPushTags()
.call()
有关身份验证的详细信息,请参阅here
请注意,如果源存储库包含标记,则必须在克隆后单独将这些标记提取到临时存储库中。