写一个通过git命令获取当前仓库分支与要拉取得分支对比,如果分支不同则切换分支拉取,如果相同则直接拉取的java demo
时间: 2024-03-27 18:37:25 浏览: 65
好的,以下是一个通过Git命令获取当前仓库分支与要拉取的分支对比,如果分支不同则切换分支拉取,如果相同则直接拉取的Java demo:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class GitBranchDemo {
public static void main(String[] args) {
String localBranch = getCurrentBranch();
String remoteBranch = "origin/master"; // 远程分支名
if (!localBranch.equals(remoteBranch)) {
// 分支不同,切换分支并拉取
System.out.println("当前分支为:" + localBranch);
System.out.println("准备切换分支至:" + remoteBranch);
if (switchBranch(remoteBranch)) {
System.out.println("切换分支成功,拉取代码中...");
pull();
} else {
System.out.println("切换分支失败!");
}
} else {
// 分支相同,直接拉取
System.out.println("当前分支为:" + localBranch);
System.out.println("开始拉取代码...");
pull();
}
}
// 获取当前分支名
private static String getCurrentBranch() {
String result = "";
try {
Process process = Runtime.getRuntime().exec("git symbolic-ref --short -q HEAD");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
result = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
// 切换分支
private static boolean switchBranch(String branchName) {
try {
Process process = Runtime.getRuntime().exec("git checkout " + branchName);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
return process.exitValue() == 0; // 0 表示成功
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return false;
}
// 拉取代码
private static void pull() {
try {
Process process = Runtime.getRuntime().exec("git pull");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
```
这个demo首先通过`getCurrentBranch()`方法获取当前仓库所在分支的分支名,然后与要拉取的远程分支名进行对比。如果分支不同,则通过`switchBranch()`方法切换分支并拉取代码;如果分支相同,则直接使用`pull()`方法拉取代码。
阅读全文