User Tools

Site Tools


it:git

Git Version Control System

Git (http://git-scm.com/) is a distributed version control system. It keeps a complete repository next to each working copy, thus one can commit or inspect the project history locally.

Warning: Unlike most other version control systems (e.g., Subversion) a commit is not understood as a difference between two revisions but as the content of its revision. In fact, Git stores the commit under the SHA-1 hash of all files in the project – also files that were not changed in this commit. Thus, the same change of one sub-module committed to two Git branches that differ only in another sub-module results in two different SHA-1 hashes and two different commits. It is possible to work around this by cherry-picking but that will lead to extra headache. Better practice is to have only one feature per branch.

Setup with Eclipse and GitHub

  1. GitHub account
  2. SSH public key pair
  3. EGit
    • install “EGit - Git Team Provider”
      • either from the Eclipse Marketplace
      • or from their update site: http://download.eclipse.org/egit/updates/
  4. clone the repository to your computer and add it to Eclipse
    1. in Eclipse select File → Import
    2. then Git → Projects from Git
    3. Select Repository Source: “URI
    4. Source Git Repository
      • URI: git@github.com:ieg-vienna/Prefuse.git
      • you don't need to change anything else!
      • leave user “git” and password “”!
    5. Branch Selection: leave all branches selected
    6. select a directory where Git should store local repositories (only at first use)
      • this should be outside your Eclipse workspace directory!
      • I use C:\Users\Rind\git
    7. Local Destination: accept default values
    8. Setup Eclipse project
      • If there are Eclipse project files in the repository; i.e. “Finish” is not grayed out.
        Example: prefuse-vienna
        1. Import existing project
      • Otherwise.
        Examples: EvalBench, TimeBench, ieg-util, ieg-prefuse
        1. Import as general project
        2. close project in Eclipse
        3. manually copy eclipse.project to .project and eclipse.classpath to .classpath
          If this does not work in Windows Explorer, the Windows Commandline or a good text editor can be used.
        4. reopen project in Eclipse
      • The 3rd option (new project wizard) fails.

Note: for contribution development EGit will be sufficient – you do NOT need Git for Windows

Note: I wrote this guide for Eclipse IDE for Java Developers Helios SR2, but it should also work for other versions.

Work git on the client and Subversion on the server

Initial Checkout:

git svn clone svn+ssh://svn.isis.tuwien.ac.at/home/HypoVis/repository/Theses/TimeBench

Work with git as you like, include branches and rebasing.

Commit to server:

git svn dcommit

Update from server:

git svn rebase

Might be relevant: git-svn to handle eol-style

Alternative: http://subgit.com/

Attach a new pull request to an existing issue on GitHub

curl --user "alex-rind:XXXXX" \
       --request POST \
       --data '{"issue": "16", "head": "alex-rind:character-encoding", "base": "master"}' \
       https://api.github.com/repos/prefuse/Prefuse/pulls

XXXXX → GitHub web password
character-encoding → branch name

Source: http://stackoverflow.com/questions/4528869/how-do-you-attach-a-new-pull-request-to-an-existing-issue-on-github#answer-4529172

Rename files throughout history

git filter-branch --index-filter '
git ls-files -s | \
sed "s-\t.classpath-\teclipse.classpath-" | \
sed "s-\t.project-\teclipse.project-" | \
GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && \
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
' HEAD

Source: http://www.fussylogic.co.uk/blog/?p=1250

Further Readings

it/git.txt · Last modified: 2015/11/25 10:14 by Alexander Rind

alex @ ieg: home about me publications research