[仅需一步][org.eclipse.jgit]Java代码操作git命令的步骤...再也不用手写git命令了
linux跑了一个需要经常pull代码的java项目…
每次从gitee拉代码无论是用.sh还是直接命令行都很麻烦而且担心搞错分支…
pom.xml
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>5.12.0.202106070339-r</version>
</dependency>
application.properties
# 应用名称
spring.application.name=mygit2
# 应用服务 WEB 访问端口
server.port=10000
# git仓库地址
GitRepository.Url = https://gitee.com/dongbao126/springboot
# git分支名称
GitRepository.BranchName = master
# git项目名字
GitRepository.ProjectName = springboot
# git登录名字
GitRepository.UserName = XX@XX.com
# git登录密码
GitRepository.Password = XXXXXX
# git本地路径
GitRepository.LocalRootPath = D:\\my_project
GitController.java
package com.dongtech.mygit2;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.PullResult;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.security.x509.OtherName;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
@Controller
public class GitController {
private static final Logger logger = LoggerFactory.getLogger(GitController.class);
private Git git;
private Repository localRepo;
@Autowired
private GitConfig gitConfig;
@RequestMapping("/Git-Sync")
@ResponseBody
public String GitSync(){
logger.info("Git Sync: start..."+getCurrentTime());
boolean isSuccess = false;
UsernamePasswordCredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(gitConfig.GitUserName,gitConfig.GitPassword);
try {
logger.info("============localPath==========" + getLocalPath());
localRepo = new FileRepository(getLocalPath() + "/.git");
git = new Git(localRepo);
File localPathFile = new File(getLocalPath());
if (!localPathFile.exists()) {
Git git = GitClone(gitConfig.GitUrl, gitConfig.GitBranchName, getLocalPath(),credentialsProvider);
if (git != null){
isSuccess = true;
}
} else {
isSuccess = GitPull(gitConfig.GitBranchName,credentialsProvider);
}
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
logger.info("Git Sync: end..."+getCurrentTime());
return "git sync failed";
}finally{
logger.info("Git Sync: end..."+getCurrentTime());
}
if (isSuccess)
return "git sync success";
return "git sync failed";
}
/**
* 获取本地路径
* @return
*/
private String getLocalPath(){
return gitConfig.LocalRootPath + File.separator + gitConfig.GitProjectName;
}
/**
* 获取当前时间
* @return
*/
private String getCurrentTime(){
SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
Date date = new Date(System.currentTimeMillis());
return formatter.format(date);
}
/**
* 执行GitClone
*/
private Git GitClone(String gitUrl, String branch, String localPath, UsernamePasswordCredentialsProvider credentialsProvider) throws Exception {
return Git.cloneRepository().setURI(gitUrl).setBranch(branch).setDirectory(new File(localPath)).setCredentialsProvider(credentialsProvider).call();
}
/**
* 执行GitPull
*/
private boolean GitPull(String branch,UsernamePasswordCredentialsProvider credentialsProvider) throws Exception {
// 强制stash 保证不会冲突
git.stashCreate();
//TODO 更多命令
//git.pull();
//git.add();
//git.push();
//git.merge();
PullResult result = git.pull().setRemoteBranchName(branch).setCredentialsProvider(credentialsProvider).call();
return result.isSuccessful();
}
}
直接运行

java -jar mygit2-1.0.0.jar

本地分支git 落后于 remote分支

访问localhost:10000/Git-Sync
本地分支已被更新至最新
其实这个库支持pull/stash/add/merge/push多种命令的…需要的可以自由摸索…
github
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现