There is no ready-to run counterpart for git remote and am in JGit, but it should be possible to implement (a subset of) them with reasonable effort. Those sub-commands of git remote that query or manipulate the config file can be emulated by directly accessing the repository configuration through Repository.getConfig()....
The following setup works for me: DiffFormatter formatter = new DiffFormatter( System.out ); formatter.setRepository( git.getRepository() ); AbstractTreeIterator commitTreeIterator = prepareTreeParser( git.getRepository(), Constants.HEAD ); FileTreeIterator workTreeIterator = new FileTreeIterator( git.getRepository() ); List<DiffEntry> diffEntries = formatter.scan( commitTreeIterator, workTreeIterator ); for( DiffEntry entry : diffEntries ) { System.out.println( "Entry: " + entry +...
The one library that you can use outside of any IDE, and for any of your java project, is JGit (sources at GitHub, User Guide). See "Confusion in choosing between JavaGit, JGit and EGit" That library can be used independently of Eclipse. As I mention in this answer, the package...
To obtain the tree of the head commit, call git.getRepository().resolve( "HEAD^{tree}" ) and to obtain the tree of the parent of the HEAD commit, call git.getRepository().resolve( "HEAD~1^{tree}" ) Search for 'Git caret and tilde' if you are interested in more details. To summarize, here goes a snippet that computes the...
A viable approach would be to clone the repositoy from the source server to a temporary location and from there push it to the destination server. You can clone a repository with JGit like this: Git.cloneRepository() .setCredentialsProvider( new UsernamePasswordCredentialsProvider( "user", "password" ) ); .setURI( remoteRepoUrl ) .setDirectory( localDirectory ) .setCloneAllBranches(...
You can use the LogCommand to obtain the number of commits like so: Iterable<RevCommit> commits = git.log().call(); int count = 0; for( RevCommit commit : commits ) { count++; } If not specified otherwise the command starts at HEAD. With add() multiple commit-ids can be added to start the graph...
You don't neccessarily have to parse tags with RevWalk#parseTag(). This method is only to parse annotated tags. To tell one from the other you can even use parseTag (or is there any better way?) RevTag tag; try { tag = revWalk.parseTag( ref.getObjectId() ); // ref points to an annotated tag...
Compared with native Git's log command, the LogCommand if JGit offers only basic options. But there is a RevWalk in JGit that allows to specify custom filters while iterating over commits. For example: RevWalk walk = new RevWalk( repo ); walk.markStart( walk.parseCommit( repo.resolve( Constants.HEAD ) ) ); walk.sort( RevSort.REVERSE );...
Just found out the solution, You need to put the files in a particular order depending on the file name or the folder name, my problem is I was looking to the ObjectId.getName() which is this hash....
As an alternative I tried pull with rebase private void pullWithRebase(Git git) throws GitAPIException { git.checkout().setName("master").call(); List<Ref> branches = git.branchList().setListMode(ListBranchCommand.ListMode.ALL).call(); String remoteMasterBranchName = "refs/remotes/origin/master"; for (Ref ref : branches) { if (remoteMasterBranchName.equals(ref.getName())) { git.pull().setRemoteBranchName("master").setRebase(true).call(); return; } } } At first it didn't work for me for the same reason. But...
we can get commits like this: commits = command.add(r.resolve(until)).call(); so we can get all commits from start 00000000000000000000000 to until...
Your second approach is right. commit.getParents() returns incomplete RevCommits. While their ID attribute is set, all other attributes (tree, message, author, committer, etc.) are not. Hence the NullPointerException. In order to actually use the parent commit you need to first parse the commit header, either with parseCommit like you did...
You'll have to experiment a little with a debugger, but it is possible to send push arguments like you want. Getting them to the Groovy hook mechanism may be tricky. Or maybe not. I haven't looked at it. git push --receive-pack='git receive-pack --ignoreOurCustomHook' origin master Once you have something working,...
One thing that I ran into was that if you use Git.cloneRepository().call(), you need to close the result that is returned, i.e. Git result = Git.cloneRepository() .... .call(); try { ... } finally { result.close(); } See also this code snippet from the jgit-cookbook Additionally some places in JGit that...
It is possible that the current eclipse process keep an handle on the pack file, preventing its deletion. As RĂ¼diger Herrmann suggests in the comments: If the open file handle is what prevents the file from being deleted, make sure to close the repository that is returned by init: clone.getRepository().close()...
To append a file you would need a non-bare repository (one that has a work directory. This mailing list post states, that The porcelain commands assume a File basis in some cases, particularly when it comes to the working tree. You can perform inserts into an in-memory repository if you...
To my knowledge there is no ready-to-use solultion to advise the merger to ignore whitespaces in JGit. The MergeCommand has a setStrategy() method to choose the merge strategy, the equivalent to --strategy. And there is also a RecursiveMerger strategy, but it doesn't allow to specify further options. I suggest to...
I ended up just merging two branches and directly resolving any conflicts by modifying files. private static final String CONFLICT_HEAD_MARKER = "<<<<<<<"; private static final String CONFLICT_BORDER_MARKER = "======="; private static final String CONFLICT_UPSTREAM_MARKER = ">>>>>>>"; private boolean acceptHead; public void resolve(File file) throws IOException { File temp = new...
I did the same search some time ago, but I concluded that it was preferable to use JGit (even if it's a Java library) in Scala. It's used by products with lots of users (eclipse, netbeans, gerrit,...) and even some Scala products like Gitbucket use it. Its API can be...
While cloning is easier than git init . + git remote add origin ... + git fetch + git reset --hard origin/master., that sequence is needed for a non-empty folder indeed. In that case, you need to tell Git what to fetch, as commented by the OP: git.Fetch().SetRefSpecs(new RefSpec("+refs/heads/*:refs/remotes/origin/*")).Call(); That...
new BranchConfig(repo.getConfig(), repo.getBranch()).getTrackingBranch() ...
If you replace the FileRepositoryBuilder part of your snippet with the lines below, the snippet will work. Git git = Git.open( localPath ); Repository repository = git.getRepository(); Note that your snippet sets the GitDir of the builder to localPath, but the local path denotes the work directory of the just...
You need to pass a UsernamePasswordCredentialsProvider with the token as its user name. String remoteUrl = "https://${token}@github.com/user/repo.git"; CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider( "${token}", "" ); git.push().setRemote( remoteUrl ).setCredentialsProvider( credentialsProvider ).call(); The above can at least be used to authenticate with a GitHub repository. Though, I can't say if this scheme...
When git clone command called, it will create a "master" branch automatic. But now the head point to nothing. So we should commit something then the head will point to the latest commit. We can do it like this: git = Git.cloneRepository().setURI(repository.getDirectory().getAbsolutePath()).setDirectory(file) .setNoCheckout(true).call(); git.commit().setMessage("Initial commit").call(); git.branchCreate().setName(FINAL_TEMP_BRANCH).call(); Now the git repository...
If I understand your question correctly, you want to find a commit within a given date range and then read the contents of a specific file form that commit. Assuming that there is only one commit per date, you can use a RevWalk to To get get the desired commit:...
BranchTrackingStatus.of() assumes that branchName denotes a local branch, either by its full name (e.g. refs/heads/master) or its short name (e.g. master). It returns null if the given branchName cannot be found or the tracking branch is not configured or does not exist. To compare two arbitrary branches, you could adopt...