This document provides an introduction to using Git and EGit at Eclipse. It begins with an outline and introduction to distributed version control systems and key Git concepts like changesets, branches, merging, and pulling/pushing. The remainder of the document consists of exercises for installing Git and EGit, setting up and working with repositories, making changes and committing, browsing history, branching, collaborating over SSH/Gerrit, rebasing, and staying up to date. The goal is for readers to learn Git through hands-on exercises of common workflows.
The first version of eBPF hardware offload was merged into the Linux kernel in October 2016 and became part of Linux v4.9. For the last two years the project has been growing and evolving to integrate more closely with the core kernel infrastructure and enable more advanced use cases. This talk will explain the internals of the kernel architecture of the offload and how it allows seamless execution of unmodified eBPF datapaths in HW.
How to build and use GTPing to generate GTP traffic for testing without eNB, SPGW etc. This work was done as part of the preparation of SRv6 mobile user plane POC at SRv6 Consortium, Data plane Study Group, which is a group of people interested in SRv6.
LinuxCon 2015 Linux Kernel Networking WalkthroughThomas Graf
This presentation features a walk through the Linux kernel networking stack for users and developers. It will cover insights into both, existing essential networking features and recent developments and will show how to use them properly. Our starting point is the network card driver as it feeds a packet into the stack. We will follow the packet as it traverses through various subsystems such as packet filtering, routing, protocol stacks, and the socket layer. We will pause here and there to look into concepts such as networking namespaces, segmentation offloading, TCP small queues, and low latency polling and will discuss how to configure them.
Yocto Project looked over by Linux Foundation is an open source project. Yocto can be summarized in a single - "It is not an embedded Linux distribution, It creates a custom one for you"
My presentation provides an overview of Yocto Project, an easy starters guide.
The first version of eBPF hardware offload was merged into the Linux kernel in October 2016 and became part of Linux v4.9. For the last two years the project has been growing and evolving to integrate more closely with the core kernel infrastructure and enable more advanced use cases. This talk will explain the internals of the kernel architecture of the offload and how it allows seamless execution of unmodified eBPF datapaths in HW.
How to build and use GTPing to generate GTP traffic for testing without eNB, SPGW etc. This work was done as part of the preparation of SRv6 mobile user plane POC at SRv6 Consortium, Data plane Study Group, which is a group of people interested in SRv6.
LinuxCon 2015 Linux Kernel Networking WalkthroughThomas Graf
This presentation features a walk through the Linux kernel networking stack for users and developers. It will cover insights into both, existing essential networking features and recent developments and will show how to use them properly. Our starting point is the network card driver as it feeds a packet into the stack. We will follow the packet as it traverses through various subsystems such as packet filtering, routing, protocol stacks, and the socket layer. We will pause here and there to look into concepts such as networking namespaces, segmentation offloading, TCP small queues, and low latency polling and will discuss how to configure them.
Yocto Project looked over by Linux Foundation is an open source project. Yocto can be summarized in a single - "It is not an embedded Linux distribution, It creates a custom one for you"
My presentation provides an overview of Yocto Project, an easy starters guide.
Open vSwitch - Stateful Connection Tracking & Stateful NATThomas Graf
Update on status of connection tracking and stateful NAT addition to the Linux kernel datapath. Followed by a discussion on the topic to collect ideas and come up with next steps.
Container Network Interface: Network Plugins for Kubernetes and beyondKubeAcademy
With the rise of modern containers comes new problems to solve – especially in networking. Numerous container SDN solutions have recently entered the market, each best suited for a particular environment. Combined with multiple container runtimes and orchestrators available today, there exists a need for a common layer to allow interoperability between them and the network solutions.
As different environments demand different networking solutions, multiple vendors and viewpoints look to a specification to help guide interoperability. Container Network Interface (CNI) is a specification started by CoreOS with the input from the wider open source community aimed to make network plugins interoperable between container execution engines. It aims to be as common and vendor-neutral as possible to support a wide variety of networking options — from MACVLAN to modern SDNs such as Weave and flannel.
CNI is growing in popularity. It got its start as a network plugin layer for rkt, a container runtime from CoreOS. Today rkt ships with multiple CNI plugins allowing users to take advantage of virtual switching, MACVLAN and IPVLAN as well as multiple IP management strategies, including DHCP. CNI is getting even wider adoption with Kubernetes adding support for it. Kubernetes accelerates development cycles while simplifying operations, and with support for CNI is taking the next step toward a common ground for networking. For continued success toward interoperability, Kubernetes users can come to this session to learn the CNI basics.
This talk will cover the CNI interface, including an example of how to build a simple plugin. It will also show Kubernetes users how CNI can be used to solve their networking challenges and how they can get involved.
KubeCon schedule link: http://sched.co/4VAo
Angelo Compagnucci - Upgrading buildroot based devices with swupdatelinuxlab_conf
This talk will guide you through the perils of building a resilient software stack for embedded system using buildroot as a base, stuff your software in between and adding swupdate as cherry on top! The talk will be composed by three main areas:
How to use buildroot as a base system for your stack
An introduction to swupdate and it’s fields of use
An example of using buildroot + swupdate to update your stack.
In the first we will talk about using buildroot as base for your software and how to add your software around. Buildroot make really easy to build a complete firmware image when using the standard configurations provided by the software but it could be cumbersome if you want to add your software in simple, easy and automated way. So we will show you how to write a simple makefile to add your software as an external component and how to automate the process of compiling everything to produce your binary artifacts.
The second part will discuss about swupdate and it’s field of use. Swupdate provides several ways of use: it can be used in a simple way, it could be integrated to do A/B updates, it could be used via network or locally using a medium. We will discuss about the possibility of approaches of system updates and how swupdate can satisfy each one of the use cases.
The third phase will show you a real approach adopted to solve a specific use cause with the hope it can be used a reference for auditor specific needs.
Kirill Tsym discusses Vector Packet Processing:
* Linux Kernel data path (in short), initial design, today's situation, optimization initiatives
* Brief overview of DPDK, Netmap, etc.
* Userspace Networking projects comparison: OpenFastPath, OpenSwitch, VPP.
* Introduction to VPP: architecture, capabilities and optimization techniques.
* Basic Data Flow and introduction to vectors.
* VPP Single and Multi-thread modes.
* Router and switch for namespaces example.
* VPP L4 protocol processing - Transport Layer Development Kit.
* VPP Plugins.
Kiril is a software developer at Check Point Software Technologies, part of Next Generation Gateway and Architecture team, developing proof of concept around DPDK and FD.IO VPP. He has years of experience in software, Linux kernel and networking development and has worked for Polycom, Broadcom and Qualcomm before joining Check Point.
Method of NUMA-Aware Resource Management for Kubernetes 5G NFV Clusterbyonggon chun
Introduce the container runtime environment which is set up with Kubernetes and various CRI runtimes(Docker, Containerd, CRI-O) and the method of NUMA-aware resource management(CPU Manager, Topology Manager, Etc) for CNF(Containerized Network Function) within Kubernetes and related issues.
GitOps is the best modern practice for CD with KubernetesVolodymyr Shynkar
Evolution of infrastructure as code, a framework that can drastically improve deployment speed and development efficiency.
Youtube version: https://www.youtube.com/watch?v=z2kHFpCPum8
Deep dive in container service discoveryDocker, Inc.
Service discovery and traffic load-balancing in the container ecosystem relies on different technologies, such as IPVS and iptables, and container orchestrators use different approaches. This talk will present in details how Docker Swarm and Kubernetes achieve this. The talk will continue with a demo showing how applications that are not managed by Kubernetes can take advantage of its native load-balancing. Finally, it will compare these approaches to service-mesh solutions.
Tutorial: Using GoBGP as an IXP connecting routerShu Sugimoto
- Show you how GoBGP can be used as a software router in conjunction with quagga
- (Tutorial) Walk through the setup of IXP connecting router using GoBGP
eBPF is an exciting new technology that is poised to transform Linux performance engineering. eBPF enables users to dynamically and programatically trace any kernel or user space code path, safely and efficiently. However, understanding eBPF is not so simple. The goal of this talk is to give audiences a fundamental understanding of eBPF, how it interconnects existing Linux tracing technologies, and provides a powerful aplatform to solve any Linux performance problem.
OpenShift, Docker, Kubernetes: The next generation of PaaSGraham Dumpleton
Containers are upending the way that developers and operations groups are thinking about how to deploy software. To cater for these new ways of thinking, traditional Platform as a Service (PaaS) providers are also needing to adapt. Although PaaS providers have been using containers for some time, the new focus is around Docker and the image portability it provides. It isn't all about containers though, you still need orchestration to manage where containers are deployed, as well as workflows for getting you from source code to deployed application.
In this talk you will learn about how OpenShift, Red Hat's Open Source PaaS is being reimplemented around Docker and Kubernetes, adding in its own secret sauce to deliver a next generation PaaS.
Accelerating Envoy and Istio with Cilium and the Linux KernelThomas Graf
This talk will provide an introduction to injection options of Envoy and then deep dive into ongoing Linux kernel work that enables injecting Envoy while introducing as little latency as possible.
The servicemesh and the sidecar proxy model are on a steep trajectory to redefine many networking and security use cases. This talk explains and demos a new socket redirect Linux kernel technology that allows running Envoy with similar performance as if the sidecar was linked to the application using a UNIX domain socket. The talk will also give an outlook on how Envoy can use the recently merged kernel TLS functionality to gain access to the clear text payload transparently for end to end encrypted applications without requiring to decrypt and re-encrypt any data to further reduce the overhead and latency.
Open vSwitch - Stateful Connection Tracking & Stateful NATThomas Graf
Update on status of connection tracking and stateful NAT addition to the Linux kernel datapath. Followed by a discussion on the topic to collect ideas and come up with next steps.
Container Network Interface: Network Plugins for Kubernetes and beyondKubeAcademy
With the rise of modern containers comes new problems to solve – especially in networking. Numerous container SDN solutions have recently entered the market, each best suited for a particular environment. Combined with multiple container runtimes and orchestrators available today, there exists a need for a common layer to allow interoperability between them and the network solutions.
As different environments demand different networking solutions, multiple vendors and viewpoints look to a specification to help guide interoperability. Container Network Interface (CNI) is a specification started by CoreOS with the input from the wider open source community aimed to make network plugins interoperable between container execution engines. It aims to be as common and vendor-neutral as possible to support a wide variety of networking options — from MACVLAN to modern SDNs such as Weave and flannel.
CNI is growing in popularity. It got its start as a network plugin layer for rkt, a container runtime from CoreOS. Today rkt ships with multiple CNI plugins allowing users to take advantage of virtual switching, MACVLAN and IPVLAN as well as multiple IP management strategies, including DHCP. CNI is getting even wider adoption with Kubernetes adding support for it. Kubernetes accelerates development cycles while simplifying operations, and with support for CNI is taking the next step toward a common ground for networking. For continued success toward interoperability, Kubernetes users can come to this session to learn the CNI basics.
This talk will cover the CNI interface, including an example of how to build a simple plugin. It will also show Kubernetes users how CNI can be used to solve their networking challenges and how they can get involved.
KubeCon schedule link: http://sched.co/4VAo
Angelo Compagnucci - Upgrading buildroot based devices with swupdatelinuxlab_conf
This talk will guide you through the perils of building a resilient software stack for embedded system using buildroot as a base, stuff your software in between and adding swupdate as cherry on top! The talk will be composed by three main areas:
How to use buildroot as a base system for your stack
An introduction to swupdate and it’s fields of use
An example of using buildroot + swupdate to update your stack.
In the first we will talk about using buildroot as base for your software and how to add your software around. Buildroot make really easy to build a complete firmware image when using the standard configurations provided by the software but it could be cumbersome if you want to add your software in simple, easy and automated way. So we will show you how to write a simple makefile to add your software as an external component and how to automate the process of compiling everything to produce your binary artifacts.
The second part will discuss about swupdate and it’s field of use. Swupdate provides several ways of use: it can be used in a simple way, it could be integrated to do A/B updates, it could be used via network or locally using a medium. We will discuss about the possibility of approaches of system updates and how swupdate can satisfy each one of the use cases.
The third phase will show you a real approach adopted to solve a specific use cause with the hope it can be used a reference for auditor specific needs.
Kirill Tsym discusses Vector Packet Processing:
* Linux Kernel data path (in short), initial design, today's situation, optimization initiatives
* Brief overview of DPDK, Netmap, etc.
* Userspace Networking projects comparison: OpenFastPath, OpenSwitch, VPP.
* Introduction to VPP: architecture, capabilities and optimization techniques.
* Basic Data Flow and introduction to vectors.
* VPP Single and Multi-thread modes.
* Router and switch for namespaces example.
* VPP L4 protocol processing - Transport Layer Development Kit.
* VPP Plugins.
Kiril is a software developer at Check Point Software Technologies, part of Next Generation Gateway and Architecture team, developing proof of concept around DPDK and FD.IO VPP. He has years of experience in software, Linux kernel and networking development and has worked for Polycom, Broadcom and Qualcomm before joining Check Point.
Method of NUMA-Aware Resource Management for Kubernetes 5G NFV Clusterbyonggon chun
Introduce the container runtime environment which is set up with Kubernetes and various CRI runtimes(Docker, Containerd, CRI-O) and the method of NUMA-aware resource management(CPU Manager, Topology Manager, Etc) for CNF(Containerized Network Function) within Kubernetes and related issues.
GitOps is the best modern practice for CD with KubernetesVolodymyr Shynkar
Evolution of infrastructure as code, a framework that can drastically improve deployment speed and development efficiency.
Youtube version: https://www.youtube.com/watch?v=z2kHFpCPum8
Deep dive in container service discoveryDocker, Inc.
Service discovery and traffic load-balancing in the container ecosystem relies on different technologies, such as IPVS and iptables, and container orchestrators use different approaches. This talk will present in details how Docker Swarm and Kubernetes achieve this. The talk will continue with a demo showing how applications that are not managed by Kubernetes can take advantage of its native load-balancing. Finally, it will compare these approaches to service-mesh solutions.
Tutorial: Using GoBGP as an IXP connecting routerShu Sugimoto
- Show you how GoBGP can be used as a software router in conjunction with quagga
- (Tutorial) Walk through the setup of IXP connecting router using GoBGP
eBPF is an exciting new technology that is poised to transform Linux performance engineering. eBPF enables users to dynamically and programatically trace any kernel or user space code path, safely and efficiently. However, understanding eBPF is not so simple. The goal of this talk is to give audiences a fundamental understanding of eBPF, how it interconnects existing Linux tracing technologies, and provides a powerful aplatform to solve any Linux performance problem.
OpenShift, Docker, Kubernetes: The next generation of PaaSGraham Dumpleton
Containers are upending the way that developers and operations groups are thinking about how to deploy software. To cater for these new ways of thinking, traditional Platform as a Service (PaaS) providers are also needing to adapt. Although PaaS providers have been using containers for some time, the new focus is around Docker and the image portability it provides. It isn't all about containers though, you still need orchestration to manage where containers are deployed, as well as workflows for getting you from source code to deployed application.
In this talk you will learn about how OpenShift, Red Hat's Open Source PaaS is being reimplemented around Docker and Kubernetes, adding in its own secret sauce to deliver a next generation PaaS.
Accelerating Envoy and Istio with Cilium and the Linux KernelThomas Graf
This talk will provide an introduction to injection options of Envoy and then deep dive into ongoing Linux kernel work that enables injecting Envoy while introducing as little latency as possible.
The servicemesh and the sidecar proxy model are on a steep trajectory to redefine many networking and security use cases. This talk explains and demos a new socket redirect Linux kernel technology that allows running Envoy with similar performance as if the sidecar was linked to the application using a UNIX domain socket. The talk will also give an outlook on how Envoy can use the recently merged kernel TLS functionality to gain access to the clear text payload transparently for end to end encrypted applications without requiring to decrypt and re-encrypt any data to further reduce the overhead and latency.
This is introduction to Git, distributed version control system. You will learn about git history, reasons behind its invention, design considerations, internal structure and see how to use git for your projects.
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCDSunnyvale
A brief dissertation about using GitOps paradigm to operate an application on multiple Kubernetes environments thanks to GitHub, ArgoCD and Kustomize. A talk about this matters has been taken at the event #CloudConf2020
Hardening Your CI/CD Pipelines with GitOps and Continuous SecurityWeaveworks
Join us for a webinar on how to secure your CI/CD pipeline for Kubernetes with GitOps best practices and continuous runtime protection. As modern developers and DevOps teams are embarking on a quest for speed and reliability through automated CI/CD pipelines for Kubernetes, enterprises still need to ensure security and regulatory compliance.
Together with Deepfence, the Weaveworks team will explain and demonstrate how GitOps continuous delivery pipelines, combined with continuous security observability, improves the overall security of your development workflow - from Git to production.
In this webinar we will demonstrate:
Deepfence container scanning
Git-to-Kubernetes using FluxCD
Deepfence continuous runtime security
a way to manage files and directories.
track changes over time.
recall previous versions.
source control is subset of VCS.
sharing on multiple computers
Types of vcs:
Local VCS
Centralized VCS
Distributed VCS
Features of git
commands in git
In one of our weekly training, we’ve talked about Git. Here is a quick overview of the main concepts, basic commands and branching strategy, how to work with Git, how to contribute to an OSS project, …
Project Gardener - EclipseCon Europe - 2018-10-23msohn
Open Source project Gardener (https://gardener.cloud) is a production-grade Kubernetes-as-a-Service management tool that works across various cloud-platforms (e.g, AWS, Azure, GCP, Alibaba & SAP Datacenters) and on-premise (e.g. with OpenStack)
20. Exercise - Installing Git and EGit
Git installation packages:
http://git-scm.com/download
Pre-packaged with most Linux distributions as git-core
EGit update site:
http://download.eclipse.org/egit/updates
Requires Eclipse 3.4 or later
=> get packages from the USB stick and install them
Introduce yourself to git :
$ git config --global user.name "Joe Developer"
$ git config --global user.email joe.dev@example.com
21. Documentation
List of documentation http://git-scm.com/documentation
Reference http://www.kernel.org/pub/software/scm/git/docs/
Git Cheat Sheet http://git.wiki.kernel.org/index.php/GitCheatSheet
EGit User Guide http://wiki.eclipse.org/EGit/User_Guide
EGit Eclipse Help Help > Help Contents > EGit User Guide
EGit Contributor Guide http://wiki.eclipse.org/EGit/Contributor_Guide
Git for committers http://wiki.eclipse.org/Git_for_Committers
Git for Eclipse users http://wiki.eclipse.org/EGit/Git_For_Eclipse_Users
From git command line:
$ git help <command>
22. Exercise - Setting up a repository (git)
Initialize a fresh repository starting from your favorite project
(or create a new one)
$ cd project
$ git init
Initialized empty Git repository in .git
Add a snapshot of the working tree to the index (temporary staging area)
$ git add .
Persist the contents of the index into the repository:
$ git commit
This will prompt you for a commit message.
You just stored the first version of your project in the repository.
23. Exercise - Setting up a repository (EGit)
Initialize a fresh repository starting from your favorite Eclipse project
In package explorer select the project(s) you want to version
Note: if you select multiple projects they must all reside under a common
folder
Team > Share Project > Git, click "Next"
Select the project(s) to be shared
Click "Create Repository", then "Finish"
Team > Add to Version Control
adds the selected files to the index
Team > Commit
opens the commit dialog prompting for a commit message
Click "Commit"
You just stored the first version of your project in the repository.
24. Exercise - Making Changes (git)
Modify or add some files ... and stage them for commit
$ git add file1 file2
to get a brief summary of the situation run
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: file1
# modified: file2
to compare working tree and index run
$ git diff
to compare index and last commit run
$ git diff --cached
then commit all staged changes
$ git commit
25. Exercise - Making Changes (EGit)
Modify or add some files ... and stage them for commit
Team > Add to Version Control
adds the selected files to the index
Resources are decorated according to their state
following these preferences:
Team > Git > Label Decorations
General > Appearance > Colors and Fonts > Git
To compare working tree and index select
Compare with > Git Index on modified resources
Team > Commit
and provide a commit message describing your change
26. Exercise - Browsing History (git)
Inspect the history using
$ git log
if you also want to see the diffs use
$ git log -p
for an overview use
$ git log --stat --summary
if you prefer a graphical display of the history run
$ gitk
or to display all branches
$ gitk --all
27. Exercise - Browsing History (EGit)
Inspect the history by selecting
Team > Show in Resource History
from the context menu
Using the toggle buttons of the history view you may adapt its filtering
behavior to your needs.
Select a commit to see what changes it introduced.
Comparing file revisions
Select a file in the package explorer ...
... and select a commit from the commit log pane
then select Compare with working tree from the context menu
... or select two commits you want to compare
then select Compare with each other from the context menu.
28. Exercise - Branching (git) - 1
Branches are used heavily with git to isolate development
on different topics from each other.
To create a new branch to e.g. implement a new feature run
$ git branch newfeature
list all branches( the currently checked out branch is marked with * )
$ git branch
newfeature
* master
check out this branch to your working tree
$ git checkout newfeature
then do some changes and commit them
$ git checkout -b newfeature
is a shortcut combining both these steps in one go
29. Exercise - Branching (git) -2
Switch back to the master branch
$ git checkout master
do some different changes on the master branch and commit them.
At this point the two branches have diverged with different changes in each.
To merge the feature into the master branch run (from the master branch)
$ git merge newfeature
In case of conflicts markers are inserted into the conflicting files
this can be shown with
$ git diff
edit the files with conflicts to resolve the conflicts and commit the
resolving changes.
Inspect the resulting version history using
$ gitk
Then delete the feature branch
$ git branch -d newfeature
30. Exercise - Branching (EGit)
Repeat the previous exercise in EGit, use the following context menu on your
Eclipse project
Team > Branch
to create branches and to switch between different branches.
Merging is not yet available in EGit (we are working on it)
hence for now use C git for merging.
31. Exercise - SSH Configuration
SSH Keys
check if your ~/.ssh already contains SSH keys, if not run (use your email)
$ ssh-keygen -t rsa -C "joe@example.com"
id_rsa is the default private key, id_rsa.pub is the default public key
choose a good pass phrase to protect your key
In Eclipse check that you point at the right keys
(you may also generate them from here)
Preferences > General > Network Connections > SSH2
32. Gerrit Registration
To demonstrate collaboration using git and Gerrit we invite you to play
contributor on the simple RCP mail example
Follow registration instructions in EGit contributor guide
Add a remote for the review server
Start Eclipse 3.5 or 3.6
The workflow we cover in this tutorial is the exact workflow that you would use if
you wanted to contribute to the EGit and JGit projects
33. Exercise - Collaborating (git)
Clone a remote upstream repository
cd to your Eclipse workspace
via anonymous git: protocol
$ git clone git://egit.eclipse.org/Mail.git
via filesystem
$ git clone file:///copied/from/usb-stick/Mail.git
via ssh
$ git clone ssh://[<user@>]egit.eclipse.org:29418/Mail.git
import projects into Eclipse Import > Existing Projects
create a new local topic branch topic
refresh projects in Eclipse & start editing
commit change to local topic branch
34. Exercise - Collaborating (git) - 2
push your change back (from local topic branch to Gerrit)
$ git push review
this pushes back all changes which are on the current branch
but not in remote master
Go to Gerrit and review the change you just uploaded
http://egit.eclipse.org/r/#mine
35. EMail based collaboration
create patch file (for last commit)
$ git format-patch -1
... attach patch file to Bugzilla
... or send it to mailing list for review
... or directly to another developer
... as receiver apply patch file to another repository
$ git am <patch-file>
check that the patch has been applied to your current branch
$ git log -p
Generating patch for attachment to Bugzilla
36. Exercise - Collaborating (EGit)
Clone a remote upstream repository (this time egit)
Import > Git > Git Repository, click Next
URL via anonymous git: protocol
git://egit.eclipse.org/egit.git
via filesystem
file:///copied/from/usb-stick/egit.git
via ssh
ssh://[<user@>]egit.eclipse.org:29418/egit.git
create a new local topic branch topic
start doing changes
and commit them to the local branch
37. Exercise - Collaborating (EGit) - 2
push your changes back (from local topic branch to remote Gerrit)
Team > Push To
Select Configured Remote Repository > origin
click Next
Source Ref: refs/heads/topic Target Ref: refs/for/master
click Add Spec
click Next, click Finish
38. Staying up to date
pull new upstream changes from remote master branch to current local branch
$ git pull [origin]
In two steps
$ git fetch origin
$ git merge origin/master
pull new upstream changes from remote stable-0.7 to local my-0.7
$ git pull origin stable-0.7:my-0.7
pull is fetch + merge and may lead to conflicts
EGit:
fetch is available from Team > Fetch from...
select origin as Configured Remote Repository
Source Ref: refs/heads/* Target Ref: refs/remotes/origin/*
Finish
39. Rebase
Rewrite your project history!
You want to base your work on the latest version
Upstream changed while you work
You haven't published yet
Solution: Reapply every change onto the latest upstream.
Rebase automates this
on the branch you want to rebase onto latest upstream run
$ git fetch [origin]
$ git rebase origin/master
Rebase may lead to conflicts
40. Rebasing (interactive)
A tool for cleaning up history before sharing your version
- change something a
- change something else b
- oops, not so good, fix a
- changed my mind about b
- Shawn didn't like some piece of a
rebase into
- Change something a
- Change something else b
Start with the last commit you want to retain as-is:
git rebase -i
<after-this-commit>
then follow section "Interactive Mode" of git-rebase reference
Now other people can understand your work better
41. Reviewing and Maintaining
Gerrit workflow
git push
Eclipse review via Bugzilla
format patch
Upload as attachment
Linux kernel process via mailing list send a patch via mail
to your neighbor, he applies it to his repo and vice versa
Inline patches and comments:
> if ( foo <= size) {
You should use strictly less than here
42. Tagging
List tags
$ git tag -l
Make lightweight tag
$ git tag v1.0
Make unsigned annotated tag, prompts for tag message
$ git tag -a v1.0
Make a GPG-signed tag, using the default e-mail address's key
$ git tag -s v1.0
Delete tag
$ git tag -d v1.0