逻辑
使用java代码请求git API 提供的接口获取到自己当前账号下的所有项目信息,根据返回信息拼接出备份所要的git命令生成脚本,然后在git 窗口执行脚本即可。
java代码
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class login {
public static void main(String[] args) throws Exception{
HttpClient httpClient= new DefaultHttpClient();
for (int j = 0; j < 100; j++) {
HttpGet httpPost = new HttpGet(("http://gitIP:git端口/api/v4/projects?per_page=100&page="+j+"&order_by=name"));
httpPost.setHeader("Cookie", "网页上复制的Cookie");
HttpResponse response2 = httpClient.execute(httpPost);
String result2 = EntityUtils.toString(response2.getEntity(), "utf-8");
JSONArray objects = JSONArray.parseArray(result2);
for (int i = 0; i < objects.size(); i++) {
JSONObject jsonObject = objects.getJSONObject(i);
System.out.println("git clone "+jsonObject.get("ssh_url_to_repo").toString()+" "+jsonObject.get("path_with_namespace").toString()+" && cd "+jsonObject.get("path_with_namespace").toString());
System.out.println("git branch -r | grep -v '\\->' | while read remote; do git branch --track \"${remote#origin/}\" \"$remote\"; done");
System.out.println("git fetch --all");
System.out.println("git pull --all");
System.out.println("cd /e/file \n");
}
if(objects.size()<100){
System.out.println(j+" "+objects.size()+" 结束");
break;
}
}
}
}
运行结果
将打印出来的文本全部复制到Git Bash Here 运行即可
java代码Cookie获取方式
用自己账号登录Git,F12 随便点个功能查看接口复制就可以
Git API
https://docs.gitlab.com/ee/api/projects.html#list-all-projects
脚本参考
https://blog.youkuaiyun.com/wwwsq/article/details/97106096#comments_24195607