从本地存储库中删除后,JGit 没有删除我的文件
JGit not deleting my file after I deleted from the local repository
如何使用 JGit 删除文件?
我从本地存储库中删除并提交了更改,但 JGit 似乎没有注意到它已被删除。它仍然存在于远程存储库中。
我调用的提交更改的函数:
public void commitChanges(){
Git git = null;
try {
git = Git.open(new File("./TestGitRepository/.git") );
} catch (IOException e1) {
e1.printStackTrace();
}
try {
git.add().addFilepattern(".").call();
} catch (NoFilepatternException e) {
e.printStackTrace();
} catch (GitAPIException e) {
e.printStackTrace();
}
// Now, we do the commit with a message
try {
RevCommit revCommit= git.commit().setMessage("commit try").call();
} catch (GitAPIException e) {
e.printStackTrace();
}
git.getRepository().close();
}
我调用的推送更改的函数:
public void pushLocalChanges(){
Repository localRepo = null;
try {
localRepo = new FileRepository("./TestGitRepository/.git");
} catch (IOException e) {
e.printStackTrace();
}
Git git = new Git(localRepo);
PushCommand push = git.push();
UsernamePasswordCredentialsProvider user = new UsernamePasswordCredentialsProvider("userName", "password");
push.setCredentialsProvider(user);
push.setRemote(REMOTE_URL);
try {
push.call();
System.out.println ("pushed to upstream: "+push.getReceivePack());
} catch (GitAPIException e) {
e.printStackTrace();
}
git.getRepository().close();
}
远程存储库上没有任何变化,我错过了什么?
预先感谢您的帮助!
这帮我解决了:
git.pull();
git.rm().addFilepattern("fileToDelete").call();
commitChanges()
pushLocalChanges()
git.rm().addFilepattern("fileToDelete").call();
只会删除作为 addFilepattern() 参数明确提到的文件。
理想情况下,它应该自动删除所有已从本地存储库中删除的文件。它可以通过使用 add().setUpdate(true) 来完成,如下所示:-
git.add().setUpdate(true).addFilepattern(".").call();
git.commit().setMessage("delete files").call();
RefSpec spec = new RefSpec("refs/heads/master:refs/remotes/branch1");
git.push().setRemote("origin").setRefSpecs(spec).call();
受楼上的启发,我已经解决了。以下是我的代码:
/**
* 添加且提交全部
* 同等于 git add . && git commit -m 'some msg'
* @param repoDir 仓库地址
* @param msg 消息
*/
public static void addAndCommitAll(File repoDir, String msg) throws IOException, GitAPIException {
try(Git git=Git.open(repoDir)){
//全部添加, 除了.gitignore文件中指定的
doAddAll(git);
//全部提交
git.commit()
.setMessage(msg)
.call();
}
}
/**
* 添加全部
* 相当于 git add .
* @param repoDir 仓库地址
*/
public static void addAll(File repoDir) throws IOException, GitAPIException {
try(Git git=Git.open(repoDir)){
doAddAll(git);
}
}
private static void doAddAll(Git git) throws GitAPIException {
//add removed and modified file
git.add()
.setUpdate(true)
.addFilepattern(".")
.call();
//add new and modified file
git.add()
.addFilepattern(".")
.call();
}
如何使用 JGit 删除文件?
我从本地存储库中删除并提交了更改,但 JGit 似乎没有注意到它已被删除。它仍然存在于远程存储库中。
我调用的提交更改的函数:
public void commitChanges(){
Git git = null;
try {
git = Git.open(new File("./TestGitRepository/.git") );
} catch (IOException e1) {
e1.printStackTrace();
}
try {
git.add().addFilepattern(".").call();
} catch (NoFilepatternException e) {
e.printStackTrace();
} catch (GitAPIException e) {
e.printStackTrace();
}
// Now, we do the commit with a message
try {
RevCommit revCommit= git.commit().setMessage("commit try").call();
} catch (GitAPIException e) {
e.printStackTrace();
}
git.getRepository().close();
}
我调用的推送更改的函数:
public void pushLocalChanges(){
Repository localRepo = null;
try {
localRepo = new FileRepository("./TestGitRepository/.git");
} catch (IOException e) {
e.printStackTrace();
}
Git git = new Git(localRepo);
PushCommand push = git.push();
UsernamePasswordCredentialsProvider user = new UsernamePasswordCredentialsProvider("userName", "password");
push.setCredentialsProvider(user);
push.setRemote(REMOTE_URL);
try {
push.call();
System.out.println ("pushed to upstream: "+push.getReceivePack());
} catch (GitAPIException e) {
e.printStackTrace();
}
git.getRepository().close();
}
远程存储库上没有任何变化,我错过了什么? 预先感谢您的帮助!
这帮我解决了:
git.pull();
git.rm().addFilepattern("fileToDelete").call();
commitChanges()
pushLocalChanges()
git.rm().addFilepattern("fileToDelete").call();
只会删除作为 addFilepattern() 参数明确提到的文件。
理想情况下,它应该自动删除所有已从本地存储库中删除的文件。它可以通过使用 add().setUpdate(true) 来完成,如下所示:-
git.add().setUpdate(true).addFilepattern(".").call();
git.commit().setMessage("delete files").call();
RefSpec spec = new RefSpec("refs/heads/master:refs/remotes/branch1");
git.push().setRemote("origin").setRefSpecs(spec).call();
受楼上的启发,我已经解决了。以下是我的代码:
/**
* 添加且提交全部
* 同等于 git add . && git commit -m 'some msg'
* @param repoDir 仓库地址
* @param msg 消息
*/
public static void addAndCommitAll(File repoDir, String msg) throws IOException, GitAPIException {
try(Git git=Git.open(repoDir)){
//全部添加, 除了.gitignore文件中指定的
doAddAll(git);
//全部提交
git.commit()
.setMessage(msg)
.call();
}
}
/**
* 添加全部
* 相当于 git add .
* @param repoDir 仓库地址
*/
public static void addAll(File repoDir) throws IOException, GitAPIException {
try(Git git=Git.open(repoDir)){
doAddAll(git);
}
}
private static void doAddAll(Git git) throws GitAPIException {
//add removed and modified file
git.add()
.setUpdate(true)
.addFilepattern(".")
.call();
//add new and modified file
git.add()
.addFilepattern(".")
.call();
}