Provides examples and code snippets for the JGit Java Git implementation.
The JGit framework is rich and diverse, it has two layers, a low-level api and a higher-level set of porcelain commands. This can be a bit intimidating at first as there are lots of classes, some of which are not relevant for most tasks.
This project tries to provide a collection of ready-to-run snippets which try to provide a quick start into building functionality using JGit. Please make sure to also use the existing JavaDoc and the User Guide as well, as they are well done and provide detailed information and a general overview of JGit respectively.
Note: Please use sites such as http://stackoverflow.com for general questions about JGit usage, not issues in this project. Issues should be used for problems with snippets and suggestions of missing snippets. Snippets from good answers on stackoverflow can then be included here, naturally.
git clone git://github.com/centic9/jgit-cookbook
mvn dependency:sources eclipse:eclipse package
./gradlew eclipse check
Import the project into an Eclipse workspace and execute the snippets there.
- Initialize a new repository
- Add a new file to the index
- Commit a file to an existing repository
- Commit all changes
- List commits (i.e. Log)
- List all tags in a repository
- List all branches in a repository
- List all commits in a repository
- Create and delete branches
- Create and delete tags
- Return diff between two branches
- Show diff of changes to a file between two revs
- Show diff of changes to all files between two commits
- Show diff of changes to a file between two commits when the file has been renamed
- Show Status
- Store contents of branch into a compressed file
- Write contents of branch into a compressed file using a custom archive format
- Blame, i.e. find out which commit changed specific lines in a file
- Add and list Notes attached to commits
- List available Notes
- Clean all untracked files
- Create, list, apply and drop stashes
- Run garbage collection
- Clone a remote reppository into a new local directory
- Iterate remote references in a repository
- List remote heads/tags without a local clone
- Fetch from remote repositories
- Get the SHA-1 ref from a name, e.g. refs/heads/master
- Get the commit-object from a name or a SHA-1
- Get the commit-message
- Get the tree-object from a commit-object, name or SHA-1
- Read the contents of a file/blob
- Get the tag-object from a name or a SHA-1
- Resolve complex references, e.g. HEAD^^ to a SHA-1
- Iterate over the commits on a branch
- Read contents of a specific file from a specific commit
- List remotes configured for the current repository
- Print out user information from Git
- Read file attributes, e.g. executeable state, file or directory, size, ...
- Use class BranchTrackingStatus to retrieve number of commits ahead/behind compared to remote branches
- Check if commits on other branches are merged into a given branch
- Iterate all commits of a repository - https://gerrit.googlesource.com/plugins/branch-network/+log/refs/heads/master/src/main/java/com/googlesource/gerrit/plugins/branchnetwork/data/JGitFacade.java
- Take some of the unit tests as example: https://github.com/eclipse/jgit/tree/master/org.eclipse.jgit.test/tst/org/eclipse/jgit/api
- Add/Remove/Read Notes
- SubModules: http://stackoverflow.com/questions/13426798/jgit-read-gitmodules
- Diffing: http://stackoverflow.com/questions/12987364/how-to-diff-with-two-files-by-jgit-without-creating-repo
- Ammend a previous commit: http://stackoverflow.com/questions/4772142/jgit-unstaging-files-removing-files-from-the-index-and-ammending-a-commit
- Remove a file from the index: http://stackoverflow.com/questions/4803462/jgit-java-git-library-unstaging-files
- Git repo on Amazon S3: http://stackoverflow.com/questions/8744611/git-repository-on-s3-as-origin-not-as-backup http://stackoverflow.com/questions/7031729/publish-to-s3-using-git http://www.fancybeans.com/blog/2012/08/24/how-to-use-s3-as-a-private-git-repository/
- Doing stuff without local storage: Using org.eclipse.jgit.storage.dfs.InMemoryRepository to clone a Git repo in-memory and work from there
- CherryPick
- Rebase - http://stackoverflow.com/questions/22945257/jgit-how-to-squash-commits
- Submodules - http://www.codeaffine.com/2014/04/16/how-to-manage-git-submodules-with-jgit/
The following sources were used to build the snippets
- JGit JavaDoc
- JGit User Guide
- JGit related questions on Stackoverflow
- AlBlue's Blog: Embedding JGit
- JGit main page
Please note that the list of snippets is not yet complete, probably never will. If you are missing things or have suggestions how to improve or add snippets, please either send pull requests or create issues.
Copyright 2013, 2014 Dominik Stadler
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. some more text