Wie kann ich eine Datei mit JGit löschen?

Ich habe aus dem lokalen Repository gelöscht und die Änderungen festgeschrieben, aber anscheinend hat JGit nicht bemerkt, dass sie gelöscht wurden. Es ist noch im Remote-Repository vorhanden.

Die Funktion, die ich aufrufe, um Änderungen festzuschreiben:

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();
}

Die Funktion, die ich aufrufe, um die Änderungen zu pushen:

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();    
}

Am Remote-Repository ändert sich nichts. Was habe ich vermisst? Vielen Dank im Voraus für Ihre Hilfe!

0
sabrina2020 28 Dez. 2015 im 19:55

3 Antworten

Beste Antwort

Das löst es für mich:

 git.pull();
 git.rm().addFilepattern("fileToDelete").call();
 commitChanges()
 pushLocalChanges()
2
sabrina2020 29 Dez. 2015 im 07:59

git.rm().addFilepattern("fileToDelete").call(); löscht nur die Dateien, die explizit als Argument für addFilepattern () genannt werden.

Im Idealfall sollten automatisch alle Dateien gelöscht werden, die aus dem lokalen Repo gelöscht wurden. Und dies kann mit add (). SetUpdate (true) erfolgen, wie unten gezeigt: -

            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();
2
Sudheep 24 Feb. 2016 im 12:02

Lassen Sie sich von den oben genannten Personen inspirieren, ich habe es gelöst. Folgendes ist mein Code:

/**
 * 添加且提交全部
 * 同等于 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();
 }
0
Mohamad Reza Shahrestani 21 Dez. 2019 im 08:22