** Line Endings for EGit in Eclipse: Be aware that the global settings of the command line version of git might be different from the global EGit settings: (Perspective Git Repository Exploring -> <Context Menu on Repo Location> Open Properties View -> Global Configuration -> Edit ):

*You can directly get Web access to git repositories: http://git.eclipse.org/

+

+

After installation of EGit in Eclipse, you can look up "Git for Eclipse Users" in the EGit Documentation.

+

+

== Installations on your computer ==

+

+

*download git: http://git-scm.com/download

+

**e.g. for Windows: Git-1.7.3.1-preview20101002.exe

+

**Line Endings:

+

***Windows: check out Windows-style, commit Unix-style line endings

+

***Linux: Checkout as is, commit Unix-style line endings

+

*install EGit (update site): http://download.eclipse.org/egit/updates

+

**Line Endings for EGit in Eclipse: Be aware that the global settings of the command line version of git might be different from the global EGit settings: (Perspective Git Repository Exploring -&gt; &lt;Context Menu on Repo Location&gt; Open Properties View -&gt; Global Configuration -&gt; Edit ):

*switch to a newly created (local) branch in your Git repository with an appropriate name, say 'mywork'

+

*switch to a newly created (local) branch in your Git repository with an appropriate name, say 'mywork. (It is recommended to turn off any auto merge/rebase function on pull)

−

*as long as you work on your local branch you are shielded against changes on the remote master branch. However, before you push you should pull the master branch and merge the changes into your local mywork branch

+

*as long as you work on your local branch you are shielded against changes on the remote master branch.<br>

*when you are ready to push you push your branch to Gerrit with ref HEAD:refs/for/master/mywork (this will create a so called topic branch in Gerrit)

*when you are ready to push you push your branch to Gerrit with ref HEAD:refs/for/master/mywork (this will create a so called topic branch in Gerrit)

Line 106:

Line 116:

=== Squashing Changes ===

=== Squashing Changes ===

−

Here is an article how Git can merge several commits into one using (interactive) rebase:<br>

+

Here is an article how Git can merge several commits into one using (interactive) rebase: (cannot be done in EGit (version 2.1) yet)<br>

*Use branches when working with Gerrit ([http://wiki.eclipse.org/Gerrit#Use_branches_when_working_with_Gerrit see how])<br> Consider to create a new branch for each independent piece of work.<br>

+

*Reduce the number of reviews <br> Remember, that each commit with a new change-id spawns a new review/change. Before pushing to Gerrit, you should squash your local commits into 1 commit ([http://wiki.eclipse.org/Gerrit#Squashing_Changes see how]). The first time it gets a new change-id ([http://wiki.eclipse.org/Gerrit#Proper_handling_of_Gerrit's_Change Id see how]), otherwise amend this commit. If you want to push a new change, consider that it will be difficult to alter previous changes (see below).<br>

+

*Fast forward only <br> If you push a commit on a previous change, you have to rebase all succeeding changes. This often goes with a great deal of work. Therefore it is recommended to use a fast forward only approach.

+

*Rebase on final submit <br> In case Gerrit's auto merges fails, you have to rebase your change(s) on master. <br> At the same time you can reorganize your changes (history and messages) to be suitable for the public repository.

+

**If there is only 1 commit to submit, rebase it and just amend this modifications.

+

**else you have to walk through the commit history and decide for each commit to a) take it over to the public repo by recommitting it (with a new change-id) or to omit it and squash it into the next one. After that abandon your old obsolete changes. Use an interactive rebase (see how) and ensure for each commit manually that you don't commit a duplicate change-id. Note: This cannot be done effectively in EGit (version 2.1) yet, squash all commits instead.

−

We assume the patch was created as described above.

+

== Create a Patch via Git Gui ==

−

* in the context menu of the Package Explorer go to Team > Apply patch...

*in the context menu of the Package Explorer go to Team &gt; Apply patch...

+

*in the wizard select File and locate the patch file

+

*select 'Apply the patch to the workspace root'

+

*set leading path segments to 2

+

*check the result and Finish

+

+

== Checkout a previous revision ==

+

+

Inspect the log and determine the commit id you want to change to. Then <code>git checkout</code> this:

$ git checkout 2eb90f4643fd425f77de2b88753a86416cda0166

$ git checkout 2eb90f4643fd425f77de2b88753a86416cda0166

−

Note: checking out '2eb90f4643fd425f77de2b88753a86416cda0166'.

+

Note: checking out '2eb90f4643fd425f77de2b88753a86416cda0166'.

−

<br>

+

−

You are in 'detached HEAD' state. You can look around, make experimental

+

−

changes and commit them, and you can discard any commits you make in this

+

You are in 'detached HEAD' state. You can look around, make experimental

−

state without impacting any branches by performing another checkout.

+

changes and commit them, and you can discard any commits you make in this

−

<br>

+

state without impacting any branches by performing another checkout.

−

If you want to create a new branch to retain commits you create, you may

+

−

do so (now or later) by using -b with the checkout command again. Example:

+

−

<br>

+

If you want to create a new branch to retain commits you create, you may

−

git checkout -b new_branch_name

+

do so (now or later) by using -b with the checkout command again. Example:

−

<br>

+

−

HEAD is now at 2eb90f4... ui.structure: during creation take position as midpoint of new interface item. Adjusted PopulateDiagramCommand accordingly.

+

+

git checkout -b new_branch_name

+

+

+

HEAD is now at 2eb90f4... ui.structure: during creation take position as midpoint of new interface item. Adjusted PopulateDiagramCommand accordingly.

+

+

== working with branches ==

+

+

=== creating a local branch ===

+

+

=== pushing a local branch ===

+

+

=== creating a remote tracking branch ===

−

== working with branches ==

+

=== pulling for remote tracking branches ===

−

=== creating a local branch ===

+

−

=== pushing a local branch ===

+

−

=== creating a remote tracking branch ===

+

−

=== pulling for remote tracking branches ===

+

−

If you often merge with the same branch, you may want to

+

If you often merge with the same branch, you may want to use something like the following in your configuration file:

−

use something like the following in your configuration file:

+

[branch "before_indigo"]

[branch "before_indigo"]

−

remote = <nickname>

+

remote = &lt;nickname&gt;

−

merge = <remote-ref>

+

merge = &lt;remote-ref&gt;

−

[remote "<nickname>"]

+

[remote "&lt;nickname&gt;"]

−

url = <url>

+

url = &lt;url&gt;

−

fetch = <refspec>

+

fetch = &lt;refspec&gt;

−

With EGit the configuration can be accesses from the Git Repositories View context menu > Open Properties View

+

With EGit the configuration can be accesses from the Git Repositories View context menu &gt; Open Properties View The Properties View displays the current configuration and offers an Edit button in the upper left corner.

−

The Properties View displays the current configuration and offers an Edit button in the upper left corner.

+

−

Here is an example of a pull configuration for a remote tracking branch:<br>

+

Here is an example of a pull configuration for a remote tracking branch:<br> [[Image:GitConfig.jpg]]

−

[[Image:GitConfig.jpg]]

+

−

== Using the eTrice github clone ==

+

== Using the eTrice github clone ==

−

According to https://bugs.eclipse.org/bugs/show_bug.cgi?id=332970 Eclipse projects with git repositories (and correct metadata set) are mirrored to github.

+

According to https://bugs.eclipse.org/bugs/show_bug.cgi?id=332970 Eclipse projects with git repositories (and correct metadata set) are mirrored to github.

−

And so is eTrice: https://github.com/eclipse/etrice

+

And so is eTrice: https://github.com/eclipse/etrice

−

Here are some slides explaining how github is accessed using EGit: http://www.slideshare.net/loianeg/using-the-egit-eclipse-plugin-with-git-hub-2578587

+

Here are some slides explaining how github is accessed using EGit: http://www.slideshare.net/loianeg/using-the-egit-eclipse-plugin-with-git-hub-2578587

−

Any github user can fork an existing github repository. This facilitates collaborating with contributors which have no commit rights.

+

Any github user can fork an existing github repository. This facilitates collaborating with contributors which have no commit rights.

−

See also the [http://wiki.eclipse.org/Development_Resources/Handling_Git_Contributions Wiki page on Git contributions].

+

See also the [http://wiki.eclipse.org/Development_Resources/Handling_Git_Contributions Wiki page on Git contributions].

−

TODO: typical workflow...

+

TODO: typical workflow...

−

[[Category:ETrice]]

+

== Some hints to create Documentation ==

−

[[Category:modeling]]

+

−

== Some hints to create Documentation ==

+

=== Location of Documentation ===

−

=== Location of Documentation ===

+

−

- ETrice Documentation will be put to org.eclipse.etrice.doc

+

−

- numbering of chapters is 000-xxx, 005-yyy, 010-zzz, 015... to have room for inject some chapters

+

- ETrice Documentation will be put to org.eclipse.etrice.doc

−

- images (put to the folder images) should have the same numbering according to the chapters

+

- numbering of chapters is 000-xxx, 005-yyy, 010-zzz, 015... to have room for inject some chapters

−

- within the etrice-index.txt document the ordering of the chapters will be done. This file will be used from the build prozess to collect all single .textile files to produce the complete Doku.

+

- images (put to the folder images) should have the same numbering according to the chapters

−

- build prozess will be started from the external tool menu => "build-etrice-doc". (you must have internet access during production of the docu)

+

- within the etrice-index.txt document the ordering of the chapters will be done. This file will be used from the build prozess to collect all single .textile files to produce the complete Doku.

+

- build prozess will be started from the external tool menu =&gt; "build-etrice-doc". (you must have internet access during production of the docu)

−

=== Within the .textile file ===

+

<br>

−

- with F1 you can get a list of the formating strings

+

−

- some formating options does not work well for all document types e.g. __italic__ does not work

+

=== Within the .textile file ===

−

in the pdf file if the string contains "_". => therefore, for names which reference a concrete model name (shown in a picture or code block) use: "??This_is_my_name??" == citation

+

+

- with F1 you can get a list of the formating strings

+

+

- some formating options does not work well for all document types e.g. __italic__ does not work in the pdf file if the string contains "_". =&gt; therefore, for names which reference a concrete model name (shown in a picture or code block) use: "??This_is_my_name??" == citation

+

+

=== Images ===

−

=== Images ===

- use IrfanView to create screen shots (everything on board what you need)

- use IrfanView to create screen shots (everything on board what you need)

−

- use the png format to save pictures (i had never problems with that)

+

- use the png format to save pictures (i had never problems with that)

+

+

- pictures should not be larger than 640*480 pixels. Otherwise they will cause problems in the PDF file. IrfanView: Ctrl+r =&gt; resize image

+

+

- to sharpen the images, use IrfanView: Image=&gt;sharpen to create perfect screen shots.

−

- pictures should not be larger than 640*480 pixels. Otherwise they will cause problems in the PDF file. IrfanView: Ctrl+r => resize image

+

<br>

−

- to sharpen the images, use IrfanView: Image=>sharpen to create perfect screen shots.

Line Endings for EGit in Eclipse: Be aware that the global settings of the command line version of git might be different from the global EGit settings: (Perspective Git Repository Exploring -> <Context Menu on Repo Location> Open Properties View -> Global Configuration -> Edit ):

create a new entry remote.bypass.push with value HEAD:refs/heads/master

note :- for juno entry remote.review.push should have value HEAD:refs/for/juno (Only if you are working on juno branch)

set the property gerrit.createchangeid to true either in your repository or globally (details can be found here)

Note: the Change-Id will be 0 and only be set to the real value on submit

Now you can commit your changes as usual to your local Git repository.

When everything is ready to push you can use EGit to push to the reviewing system (use the review remote). Gerrit will create a new change which can be reviewed and verified by a committer. Gerrit allows the committer to leave comments in the source code diff which will help to improve the code.

When everything is alright the committer may submit the changes to the eTrice Git repository.

Use branches when working with Gerrit

switch to a newly created (local) branch in your Git repository with an appropriate name, say 'mywork. (It is recommended to turn off any auto merge/rebase function on pull)

as long as you work on your local branch you are shielded against changes on the remote master branch.

when you are ready to push you push your branch to Gerrit with ref HEAD:refs/for/master/mywork (this will create a so called topic branch in Gerrit)

Proper handling of Gerrit's Change Id

Create a new change

If this is the first time it has seen the Change-Id mentioned in the commit message, Gerrit will create a new change for review.

Update an existing change

If Gerrit has seen this Change-Id before, but has not yet seen this new commit object, Gerrit will add the new commit as a new patch set on the existing change.

Squashing Changes

Here is an article how Git can merge several commits into one using (interactive) rebase: (cannot be done in EGit (version 2.1) yet)

If you want to squash your lastest local commits with EGit (e.g. before pushing to Gerrit), you can use following method:

In Git Repository Exploring: Right click on repository -> Show In -> History

In History view: To squash your lastest m commits into m (which is first in chronological order), right click on m -> Reset -> Soft (HEAD Only)

Amend commit to save changes from the m-1 commits and to edit the commit message

Note: The m commits have to be (a) continous, (b) lastest in repository and if you want to push to Gerrit (c) local

Integrating a contribution

The patch has to be IP clean and it should be checked if a CQ is necessary!

If Gerrit isn't able to merge the patch (e.g. if prerequisites lead to conflicts) a committer can merge the patch locally to his master branch (make sure to have branch.master.rebase=true) and check that in. The history will show all the commits of the contributor. Since also the bypass uses Gerrit's interface Gerrit will mark the corresponding patches as merged.

Create a patch

For the CQ diff files of the patches have to be created and attached.

This can be done as follows:

git log --author=.*contributor_name.* --parents --oneline

creates a compact list of the contributor's commits with two IDs (commit+parent) for regular commits or three IDs (commit+2 parents) for merges

git format-patch --stdout 28fda9c..537d59a > patch_1.txt

as IDs use the parent ID as first and the parent ID as second ID of the range

Gerrit workflow

The typical workflow is illustrated in the flow chart on the right side. Further details:

Gerrit workflow

Use branches when working with Gerrit (see how) Consider to create a new branch for each independent piece of work.

Reduce the number of reviews Remember, that each commit with a new change-id spawns a new review/change. Before pushing to Gerrit, you should squash your local commits into 1 commit (see how). The first time it gets a new change-id (Id see how), otherwise amend this commit. If you want to push a new change, consider that it will be difficult to alter previous changes (see below).

Fast forward only If you push a commit on a previous change, you have to rebase all succeeding changes. This often goes with a great deal of work. Therefore it is recommended to use a fast forward only approach.

Rebase on final submit In case Gerrit's auto merges fails, you have to rebase your change(s) on master. At the same time you can reorganize your changes (history and messages) to be suitable for the public repository.

If there is only 1 commit to submit, rebase it and just amend this modifications.

else you have to walk through the commit history and decide for each commit to a) take it over to the public repo by recommitting it (with a new change-id) or to omit it and squash it into the next one. After that abandon your old obsolete changes. Use an interactive rebase (see how) and ensure for each commit manually that you don't commit a duplicate change-id. Note: This cannot be done effectively in EGit (version 2.1) yet, squash all commits instead.

Apply a Patch

in the context menu of the Package Explorer go to Team > Apply patch...

in the wizard select File and locate the patch file

select 'Apply the patch to the workspace root'

set leading path segments to 2

check the result and Finish

Checkout a previous revision

Inspect the log and determine the commit id you want to change to. Then git checkout this:

$ git checkout 2eb90f4643fd425f77de2b88753a86416cda0166
Note: checking out '2eb90f4643fd425f77de2b88753a86416cda0166'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2eb90f4... ui.structure: during creation take position as midpoint of new interface item. Adjusted PopulateDiagramCommand accordingly.

working with branches

creating a local branch

pushing a local branch

creating a remote tracking branch

pulling for remote tracking branches

If you often merge with the same branch, you may want to use something like the following in your configuration file:

[branch "before_indigo"]
remote = <nickname>
merge = <remote-ref>

[remote "<nickname>"]
url = <url>
fetch = <refspec>

With EGit the configuration can be accesses from the Git Repositories View context menu > Open Properties View The Properties View displays the current configuration and offers an Edit button in the upper left corner.

Here is an example of a pull configuration for a remote tracking branch:

Some hints to create Documentation

Location of Documentation

- numbering of chapters is 000-xxx, 005-yyy, 010-zzz, 015... to have room for inject some chapters

- images (put to the folder images) should have the same numbering according to the chapters

- within the etrice-index.txt document the ordering of the chapters will be done. This file will be used from the build prozess to collect all single .textile files to produce the complete Doku.

- build prozess will be started from the external tool menu => "build-etrice-doc". (you must have internet access during production of the docu)

Within the .textile file

- with F1 you can get a list of the formating strings

- some formating options does not work well for all document types e.g. __italic__ does not work in the pdf file if the string contains "_". => therefore, for names which reference a concrete model name (shown in a picture or code block) use: "??This_is_my_name??" == citation

Images

- use IrfanView to create screen shots (everything on board what you need)

- use the png format to save pictures (i had never problems with that)

- pictures should not be larger than 640*480 pixels. Otherwise they will cause problems in the PDF file. IrfanView: Ctrl+r => resize image

- to sharpen the images, use IrfanView: Image=>sharpen to create perfect screen shots.