需求

通过java代码实现git的常用的操作
cloneaddcommitpullpush
最终可以用于例如服务器生产环境中的部分静态文件一件同步



代码

  1. import java.io.File;
  2. import java.io.IOException;
  3. import org.apache.commons.lang.ArrayUtils;
  4. import org.apache.commons.lang.StringUtils;
  5. import org.eclipse.jgit.api.AddCommand;
  6. import org.eclipse.jgit.api.CommitCommand;
  7. import org.eclipse.jgit.api.Git;
  8. import org.eclipse.jgit.api.PullResult;
  9. import org.eclipse.jgit.api.PushCommand;
  10. import org.eclipse.jgit.api.errors.GitAPIException;
  11. import org.eclipse.jgit.transport.CredentialsProvider;
  12. import org.eclipse.jgit.transport.PushResult;
  13. import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
  14. /**
  15. * java 操作 git
  16. * 实现java自动化操作git 简单功能实现
  17. * <p>
  18. * 基于Jgit
  19. * <dependency>
  20. * <groupId>org.eclipse.jgit</groupId>
  21. * <artifactId>org.eclipse.jgit</artifactId>
  22. * <version>${jgit.version}</version>
  23. * </dependency>
  24. * <p>
  25. * 代码参考
  26. * https://www.jqhtml.com/26305.html
  27. */
  28. public class GitUtils {
  29. public static UsernamePasswordCredentialsProvider getCredentialsProvider(String gituser, String gitpasswd) {
  30. UsernamePasswordCredentialsProvider credentialsProvider = null;
  31. if (StringUtils.isNotEmpty(gituser) && StringUtils.isNotEmpty(gitpasswd)) {
  32. credentialsProvider = new UsernamePasswordCredentialsProvider(gituser, gitpasswd);
  33. }
  34. return credentialsProvider;
  35. }
  36. public static void doInit(File gitDir) throws GitAPIException {
  37. if (!gitDir.exists()) {
  38. gitDir.mkdirs();
  39. }
  40. Git git = Git.init().setDirectory(gitDir).setBare(false).call();
  41. }
  42. public static void doClone(File gitDir, String gituri, CredentialsProvider credentialsProvider, String branch)
  43. throws GitAPIException {
  44. Git.cloneRepository().setURI(gituri)
  45. .setCredentialsProvider(credentialsProvider)
  46. .setDirectory(gitDir).setCloneAllBranches(false)
  47. .setBranch(branch).call().close();
  48. }
  49. public static PullResult doPull(File gitDir, String url, CredentialsProvider credentialsProvider) throws IOException,
  50. GitAPIException {
  51. Git git = Git.open(gitDir);
  52. return git.pull().setCredentialsProvider(credentialsProvider).call();
  53. }
  54. public static void doAdd(File gitDir, String... files)
  55. throws GitAPIException, IOException {
  56. try (Git git = Git.open(gitDir)) {
  57. AddCommand add = git.add();
  58. if (ArrayUtils.isEmpty(files)) {
  59. add.addFilepattern(".");
  60. } else {
  61. for (String file : files) {
  62. add.addFilepattern(file);
  63. }
  64. }
  65. add.call();
  66. }
  67. }
  68. public static void doCommit(File gitDir, String message) throws GitAPIException, IOException {
  69. Git git = Git.open(gitDir);
  70. CommitCommand commit = git.commit().setAll(false).setMessage(message);
  71. commit.call();
  72. }
  73. public static Iterable<PushResult> doPush(File gitDir, CredentialsProvider credentialsProvider) throws IOException, GitAPIException {
  74. Git git = Git.open(gitDir);
  75. PushCommand push = git.push().setCredentialsProvider(credentialsProvider);
  76. return push.call();
  77. }
  78. }