* Endgültiges Arbeitsprogramm am Ende dieser Frage hinzugefügt *
Ich konnte GitHub eine Datei hinzufügen mit org.eclipse.egit.github.core Java-Bibliothek (und Codebeispiel wird von hier verwiesen: Ссылка )
Ich kann jedoch keinen Pfad wie "folder1 \ myfile.txt" ODER "folder1 \ folder2 \ myfile.txt"
angebenIch versuche ein einfaches Beispiel zu finden, um eine Datei unter einem Ordner hinzuzufügen und konnte sie nicht wirklich finden.
Helfen Sie hier mit einem Beispiel?
Unten ist der Code, den ich verwende: (Konfigurationsdetails wie Benutzername, Reponame sind in der Methode addFileToGH ())
%Vor%Unten ist der Fehler, wenn ich den obigen Code ausführe.
org.eclipse.egit.github.core.client.RequestException: tree.sha a3b93733a6dfd221c24e94d2ce52c25307910d73 ist kein gültiger Baum (422) bei org.eclipse.egit.github.core.client.GitHubClient.createException (GitHubClient.java:552) beim org.eclipse.egit.github.core.client.GitHubClient.sendJson (GitHubClient.java:643) beim org.eclipse.egit.github.core.client.GitHubClient.post (GitHubClient.java:757) beim org.eclipse.egit.github.core.service.DataService.createTree (DataService.java:203) beim com.apps.ui5.accelerator.writers.GHFileWriter.addFileToGH (GHFileWriter.java:87) beim com.apps.ui5.accelerator.writers.GHFileWriter.main (GHFileWriter.java30)
Bearbeiten: Der Fehler verursachende Code ist kommentiert. Der kommentierte Code beginnt mit "// Code zum Hinzufügen eines Ordners, funktioniert nicht"
Mögliches Problem ist mit dieser Codezeile: folderEntry.setSha (blob_sha);
Der Fehler wird in dieser Zeile ausgelöst: Tree newTree = dataService.createTree (Repository, Einträge, baseTree.getSha ());
Bearbeiten (VonC-Antwort): Hi VonC, vielen Dank für Ihre Antwort. JGit sieht vielversprechend aus, aber ich sehe unten Probleme.
Können Sie auf ein Beispiel verweisen, das einen Ordner erstellt? Ich habe unter dem Code versucht, einen Ordner hinzuzufügen, aber nicht funktioniert!
%Vor%Es wirft diesen Fehler auf:
Ausnahme im Thread "main" java.io.IOException: Die Datei konnte nicht geöffnet werden. Grund: Das System kann den angegebenen Pfad nicht finden (Pfad C: \ Benutzer \ ramgood \ AppData \ Local \ Temp \ TestGitRepository441020326444846897 \ Ordner1 \ Testdatei1.txt, Arbeitsverzeichnis C: \ Users \ ramgood \ workspace-sapui5-1.32 \ accelerate) bei java.io.WinNTFileSystem.createFileExclusively (Native Methode) at java.io.File.createNewFile (Datei.java:1016) um com.apps.ui5.accelerator.writers.GHFolderWriter.main (GHFolderWriter.java:37)
Bearbeiten (3): Ich bin zu jgit gewechselt, wie du es vorgeschlagen hast und unten ist mein neues Programm. Ich bin in der Lage, 1. remote Repo mit meinem lokalen Repo zu klonen 2. einen Ordner und eine Datei zum lokalen Repo hinzuzufügen und lokal zu committen, aber 3. Fehler beim Senden an github .
%Vor%Ich erhalte einen Fehler unterhalb des Fehlers, wenn ich versuche, zu remoten Repo oder Github zu wechseln.
Klonen von Ссылка nach C: \ Benutzer \ ramgood \ AppData \ Local \ Temp \ REStGitRepository8321744366017013430 Ausnahme im Thread "Haupt" org.eclipse.jgit.api.errors.TransportException: Herkunft: nicht gefunden. beim org.eclipse.jgit.api.PushCommand.call (PushCommand.java:183) um org.dstadler.jgit.unfinished.PushToRemoteRepository.main (PushToRemoteRepository.java:88) Veranlasst von: org.eclipse.jgit.errors.NoRemoteRepositoryException: Herkunft: nicht gefunden. beim org.eclipse.jgit.transport.TransportLocal $ 1.open (TransportLocal.java:131) beim org.eclipse.jgit.transport.TransportBundleFile $ 1.open (TransportBundleFile.java:106) at org.eclipse.jgit.transport.Transport.open (Transport.java:565) um org.eclipse.jgit.transport.Transport.openAll (Transport.java:383) um org.eclipse.jgit.api.PushCommand.call (PushCommand.java:147) ... 1 mehr
Im Folgenden finden Sie die Konfigurationsdatei aus dem .git-Ordner. Beachten Sie, dass ich dies nicht manuell bearbeiten kann und nur über Java-Programm aktualisiert werden sollte.
[Kern] symlinks = false repositoryformatversion = 0 filemode = false logallrefupdates = true [remote "Ursprung"] url = Ссылка fetch = + refs / heads / : refs / remotes / Herkunft / [Zweig "master"] remote = Ursprung merge = refs / heads / master
Bearbeiten (Lösung): Unten ist das Arbeitsprogramm.
%Vor%Danke an VonC für seine Antworten.
Wenn Sie Dateien in einem Git Repo manipulieren möchten, sollten Sie JGit direkt verwenden und nicht Egit-Github (obwohl es auf JGit basiert).
Auf diese Weise können Sie von den Beispielen in centic9/jgit-cookbook
profitieren, einschließlich eines jgit/porcelain/CommitAll.java
Beispiel mit addFilepattern
:
Auf diese Weise können Sie jeden gewünschten Ordner (Inhalt) hinzufügen.
Ich betreibe dies als Dienst in einer Cloud-Instanz, wo ich nicht weiß, ob ich mich auf filerepo verlassen kann, was im Kochbuch-Beispiel erwähnt wird. Wenn das in der Cloud funktioniert, kann ich das als Lösung betrachten.
Sie werden sich auf das gleiche Dateirepo verlassen, das Sie gerade benutzen.
Im Beispiel wird auch eine einfache Datei, aber kein Ordner / Verzeichnis hinzugefügt.
Ersetzen Sie einfach die Datei durch einen Ordner: Es funktioniert und fügt den Ordner content hinzu.
Und ich muss Änderungen an GitHub mit einem Java-Programm, nicht mit Git-Befehlen. Wie kann ich das tun?
Einfach durch hinzufügen eine Remote zum GitHub Repo , und drängen .
Beide sind in JGit (also in Java) verfügbar.