41
News from Git in Eclipse Matthias Sohn (SAP)

News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

  • Upload
    others

  • View
    75

  • Download
    0

Embed Size (px)

Citation preview

Page 1: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

News from Git in Eclipse

Matthias Sohn (SAP)

Page 2: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

merge strategy extension point

JGit 4.0, EGit 4.1

● enables external merge strategy● used by EMF Compare to

provide model merge (Neon)

Page 3: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

EMF Compare provides model merge strategy

Computes the logical model for each version

Compares / merges complete logical model

Page 4: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

e4 smartproject import

wizardEGit

● clone repository● invoke e4 smart project import● auto-detects projects and their

types● Since Neon it's the default

wiki e4 smart import

Page 5: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

e4 smart project import

Page 6: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Staging ViewEGit

● better support non-workspace files (4.2)

● enable sorting files by status (4.3)● "Commit" opens staging view (4.3)● auto-switch to vertical layout (4.3)

Page 7: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Better support non-workspace files

Page 8: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Sorting files by status

Page 9: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

"Commit" opens Staging View

Page 10: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Auto-switch to vertical layout

Page 11: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

History ViewEGit

● auto-select branch (4.2)● new search widget (4.5)

Page 12: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Auto-select branch

Page 13: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

New search widget

Page 14: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Usability Improvements

EGit

● dirty decorator in repositories view● most git actions enabled on

working sets● configure date format● view stash in commit viewer (4.4)

Page 15: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

dirty decorator in repositories view

Page 16: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

enable most git actions onworking sets

Page 17: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

configure date format

Page 18: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

View Stash in Commit Viewer

Page 19: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Gerrit integration

EGit 4.3

● auto-configure repository cloned from Gerrit

● auto-fill "Fetch from Gerrit" wizard from clipboard

● "Commit and push" opens "Push to Gerrit" wizard

● Set topic on push for review (4.4)

Page 20: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Misc Improvements

EGit

● improved support for submodules / nested repositories (4.3)

● configurable pull options (4.3)● rebase modes (4.6)● check for running launches before

modifying the workspace (4.5)● auto-gc (4.6)

● Oomph setup for contributors (4.5)

Page 21: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

hookssupport

JGit

● pre-push (4.2)● post-commit (4.5)

Page 22: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

.gitattributesJGit 4.3

fixed most wanted JGit bug (108 votes)

● filter attributes (4.2)● text attributes● eol attributes● macros

Page 23: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

LFSLarge File Storage

JGit, EGit

client

● integrate git-lfs extension in client (4.2)● built-in JGit LFS extension (4.6)

server

● basic JGit LFS server (4.3)○ file system or S3 storage

● Gerrit lfs plugin (Gerrit 2.13)

Page 24: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Versioning large binaries in Git

large binary files can't be packed by Git efficiently

➔ Git repository growing quickly➔ gc more expensive and less efficient➔ slows down transport➔ Git server load grows

Page 25: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

.gitattributesslides.pdfX.java

Large File Storage (LFS) extension

.git-- objects

-- lfs

git server

lfs server

git

git-lfs

Page 26: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

.gitattributesslides.pdfX.java

LFS configuration

.gitattributes*.pdf filter=lfs diff=lfs merge=lfs -text.gitconfig

[filter "lfs"]clean = git-lfs clean %fsmudge = git-lfs smudge %f

which files to store in LFS ?

lfs clean filter intercepts add

lfs smudge filter intercepts checkout

.git-- config-- objects

-- lfs

Page 27: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

.gitattributesslides.pdfX.java

git add slides.pdf

version git-lfs/spec/v1id sha256:5891b5b522...size 6

store meta data in objectsstore big file in lfs objects

lfs clean filter

slides.pdf

.git-- objects

-- lfs

Page 28: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

.gitattributesslides.pdfX.java

git push origin

git server

lfs server

pre-push hook

version git-lfs/spec/v1id sha256:5891b5b522...size 6

push

slides.pdf

.git-- objects

-- lfs

Page 29: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

.gitattributesslides.pdfX.java

git fetch/clone, git checkout

git server

lfs server

version git-lfs/spec/v1id sha256:5891b5b522...size 6

fetch

checkoutdownloads large object lazily

slides.pdf

lfs smudge filter

.git-- objects

-- lfs

Page 30: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

EGit

Gerrit.gitattributesslides.pdfX.java

LFS server with JGit filesystem/S3 storage

JGit

JGit LFS client

Gerrit plugin

LFS storage(filesystem

/ S3)

.git-- objects

JGit LFS server

.git-- objects

-- lfs

Page 31: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

The quest for distributed JGit

JGit

RefTree (4.2)

● version refs as git objects● repository state described by RefTree

commit containing ref updates● enables atomic push

Ketch (4.3)

● distributed transaction log based on RefTree

● Raft distributed consensus for leader election

● basis for distributed JGit server

Page 32: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

RefTree: Versioning branches in git

store refs in git tree objects

push can update many refs -> stored in one RefTree commit

-> enable transactional ref updates when receiving a pack-> compare single SHA1 to compare repository states

Page 33: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

jgitclone with worktreestandard refs

jgit.gitbare repositoryrefs stored in RefTree

bootstrap branch symlinkedobjects linked via alternates

commit,push bootstrap

branchbootstrap branch

RefTreeVersions

symlink

objects alternatesobjects

spyempty, used for introspection

Page 34: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Ketch: multi-master git repository

● leader election (Raft)leader

Page 35: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Ketch: multi-master git repository

● leader election (Raft)● push arrives on any server

push

leader

Page 36: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Ketch: multi-master git repository

● leader election (Raft)● push arrives on any server● queue proposal to leader● leader creates new RefTree

describing target state

push

queue proposal RefTree

leader

Page 37: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Ketch: multi-master git repository

● leader election (Raft)● push arrives on any server● queue proposal to leader● leader creates new RefTree

describing target state● replicate objects and RefTree

to majority of serverspush

queue proposal RefTree

RefTree

leader

Page 38: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Ketch: multi-master git repository

● leader election (Raft)● push arrives on any server● queue proposal to leader● leader creates new RefTree

describing target state● replicate objects and RefTree

to majority of serverspush

queue proposal RefTree

RefTreeRefTree

leader

Page 39: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Ketch: multi-master git repository

● leader election (Raft)● push arrives on any server● queue proposal to leader● leader creates new RefTree

describing target state● replicate objects and RefTree

to majority of servers● commit transaction

ackack

RefTree

RefTreeRefTree

leader

Page 40: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Questions & Answers

Page 41: News from Git in Eclipse · git fetch/clone, git checkout git server lfs server version git-lfs/spec/v1 id sha256:5891b5b522... size 6 fetch checkout downloads large object lazily

Evaluate the Sessions

Sign in and vote at eclipsecon.org

- 1 + 10