staging.inyokaproject.org

git / nemene (2)

Autor:
nemene
Datum:
13. Februar 2014 12:38
Code:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
[[Vorlage(Getestet, lucid, precise)]] 
{{{#!vorlage Wissen
[:Pakete_installieren: Installation von Programmen] 
[:Terminal: Ein Terminal öffnen] 
}}}
[[Inhaltsverzeichnis(3)]] 
[[Bild(logo.png, 110, align=left)]]
[http://git-scm.com/ Git] {en} ist ein dezentrales [:Versionsverwaltung:Versionsverwaltungssystem]. Es wurde 2005 als Ersatz für das proprietäre Programm [http://www.bitkeeper.com/ BitKeeper] {en} von Linux-Maintainer [wikipedia:Linus Torvalds:] geschrieben, da BitKeeper vielen Kernel-Entwicklern durch Lizenzverschärfungen den Zugang zu den Kernelquellen verwehrte. Seit dem Entwicklungsstart hat sich Git äußerst rasant entwickelt.

Git unterscheidet sich von einem traditionellen Programm wie [:Subversion:]. Wichtige Eigenschaften sind:
 * Einfache und effiziente Arbeitsweise nach [wikipedia:KISS-Prinzip:]
 * Kein zentraler Server benötigt
 * Unterstützung vieler Übertragungsprotokolle (HTTP, HTTPS, FTP, SSH, rsync)
 * Absicherung durch [:GnuPG:]-Signierung 
 * Umfangreiche Arbeiten ohne Internetzugang möglich

= Installation =
Folgendes Paket muss installiert [1] werden:

{{{#!vorlage Paketinstallation
git
}}}

{{{#!vorlage Hinweis
Bis einschließlich [:Lucid Lynx:Ubuntu 10.04] muss stattdessen das Paket '''git-core''' installiert werden.
}}}

Bei Installation über das [:Software-Center:] können zahlreiche Erweiterungen (u.a. [#Graphische-Oberflaechen-fuer-Git Graphische Oberflächen für Git]) gleich mit geholt werden.

== Fremdquelle ==
Für die aktuelle Git-Version kann ein [:PPA:] genutzt werden.
[[Vorlage(PPA, git-core, ppa)]]

Paket nach Einbinden installieren:

{{{#!vorlage Paketinstallation,
git, ppa
}}}

So ist auch ein Update einer zuvor installierten Git-Version möglich.

== Selbst kompilieren ==
Wenn man die neueste Version von Git verwenden will, kann man Git auch selbst kompilieren.

{{{#!vorlage Builddeps
git
}}}

Bis [:Lucid:Ubuntu 10.04] (einschließlich) muss man wieder stattdessen das Paket '''git-core''' angeben und braucht zusätzlich:

{{{#!vorlage Paketinstallation
libssl-dev
}}}

Git installieren (automatisch in '''~/bin/''')(`make install` sollte __nicht__ mit Root-Rechten ausgeführt werden) [2]:

{{{#!vorlage Befehl
git clone git://github.com/gitster/git
cd git
make
make install
}}}

Diese Vorgehensweise wird von Linus Torvalds [http://article.gmane.org/gmane.linux.nfs/48295 empfohlen] {en}.

= Anwendung =
== Quellcode herunterladen ==
Um nur den Quellcode eines Projektes aus dem Git-Repository herunterzuladen:

{{{#!vorlage Befehl
git clone git://ADRESSE 
}}}

Um bspw. den aktuellen Quellcode des Linux-Kernels in das Verzeichnis '''linux''' herunterzuladen:

{{{#!vorlage Befehl
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux
}}}

Falls man hinter einer Firewall sitzt und der Zugriff über den Port `9418` gesperrt ist, kann man versuchen, über den fast immer offenen Port 80 auf das Repository zuzugreifen:

{{{#!vorlage Befehl
git clone http://ADRESSE 
}}}

== Entwicklung mit Git ==
=== Einrichtung ===
Vor Arbeitsbeginn sollte man seinen Namen und E-Mail-Adresse eintragen:

{{{#!vorlage Befehl
git config --global user.name NAME
git config --global user.email EMAIL@ADRESSE.de
}}}

Diese Daten erscheinen in der Beschreibung einer Veränderung und dienen der Identifizierung des Autors einer Revision, falls mehrere Entwickler an einem Projekt arbeiten.

Im Hinsicht auf optimale Lesbarkeit Ausgaben einfärben:

{{{#!vorlage Befehl
git config --global color.ui "auto"
}}}

Für Computer mit mehreren Prozessor-Kernen empfiehlt sich diese Option:

{{{#!vorlage Befehl
git config --global pack.threads "0"
}}}

=== Grundlagen ===
Zuerst erstellt man einen Ordner für das Projekt und wechselt dorthin. Das Git-Repository mit den nötigen Angaben erstellen:

{{{#!vorlage Befehl
git init
}}}

Quellcode des Programms erstellen und Datei(en) zum Git-Repository hinzufügen:

{{{#!vorlage Befehl
git add DATEI
}}}

Revision eines eventuell veränderten Quellcodes erstellen:

{{{#!vorlage Befehl
git commit -m "ÄNDERUNGSBESCHREIBUNG"
}}}

Eine beim letzten Commit vergessene Veränderung hinzufügen:

{{{#!vorlage Befehl
git add DATEI
}}}

Dann das vorhergehende Commit abändern (hierbei wird das letzte Commit verändert, also bei zuvor veröffentlichtem Repository nicht zu empfehlen):

{{{#!vorlage Befehl
git commit --amend
}}}

Will man den Quellcode nun auf einen Server laden:

{{{#!vorlage Befehl
git push ADRESSE BRANCHNAME
}}}

Hat ein anderer Entwickler den Quellcode verändert, kann man die lokale Version aktualisieren:

{{{#!vorlage Befehl
git pull
}}}

Hat man etwas am Quellcode verändert oder einen Patch eingespielt und möchte dies rückgängig machen:

{{{#!vorlage Befehl
git checkout -f
}}}

oder alternativ:

{{{#!vorlage Befehl
git reset --hard
}}}

Diese Befehle setzen alle unbestätigten lokalen Veränderungen zurück.

Auflisten, welche Dateien versioniert werden:

{{{#!vorlage Befehl
git ls-files
}}}

=== Auslassen mit .gitignore ===
Ein Beispiel, was für jedes Projekt angepasst werden kann:

{{{#!code bash
# generic files to ignore
# backup files (*~) and vim swap file (.swp), MacOS dir file (.DS_Store)
*~
*.lock
*.DS_Store
.*.swp
*.out

# IDE files to ignore (Netbeans, Eclipse)
nbproject/private/
.classpath
.project
.settings

# ignore generated .class files
*.class

# except this file
!.gitignore
}}}

=== Branches ===
Um mehrere Entwicklungszweige zu pflegen (bspw. '''stable''' und '''testing''') kann man sich der Branches bedienen und bestehende anzeigen lassen:

{{{#!vorlage Befehl
git branch
}}}

Neue Branch erstellen:

{{{#!vorlage Befehl
git branch BRANCHNAME
}}}

In andere Branch wechseln:

{{{#!vorlage Befehl
git checkout BRANCHNAME
}}}

=== Patch erstellen ===
Ein git-Commit in einen Patch (namens '''PATCHDATEI.patch''') verwandeln (Commit-Hash (z.B. `cfe0a421d7d334499fb5de4ab2c4e2178a4630f3`) entsprechend anpassen):

{{{#!vorlage Befehl
git format-patch cfe0a421d7d334499fb5de4ab2c4e2178a4630f3 --stdout > PATCHDATEI.patch
}}}

Patch anwenden:

{{{#!vorlage Befehl
patch -p1 < PATCHDATEI.patch
}}}

== Graphische Oberflächen für Git ==
=== gitk ===
gitk ist eine einfache Tk-Oberfläche für Git. Paket installieren:

{{{#!vorlage Paketinstallation
gitk
}}}

Starten und anzeigen des aktiven Branch:

{{{#!vorlage Befehl
gitk
}}}

oder aller Branches:

{{{#!vorlage Befehl
gitk --all
}}}

Das Programm git-gui wird zusätzlich benötigt, wenn z.B. git blame Funktionalität innerhalb von gitk genutzt wird.

=== git-gui ===
git-gui ist die Standardoberfläche für Git (offizieller Teil des Git-Projektes). Mit ihr lassen sich die alltäglichen Aufgaben komfortabel erledigen. Paket installieren:

{{{#!vorlage Paketinstallation
git-gui, universe
}}}

Starten:

{{{#!vorlage Befehl
git gui
}}}

=== qgit ===
[http://digilander.libero.it/mcostalba/ qgit] {en} ist eine [:Qt:]-basierte Oberfläche für Git, die außerhalb des Git-Projekt entwickelt wird. Paket installieren:

{{{#!vorlage Paketinstallation
qgit, universe
}}}

Auch mit dieser Oberfläche kann man bequem arbeiten.

=== gitg ===
[[Bild(./gitg.png, 300, right)]]
Grafischer Repository-Betrachter für Gnome:

{{{#!vorlage Paketinstallation
gitg
}}}

== Git und andere Versionsverwaltungssysteme ==
Sollte man gezwungen sein mit einem [:Subversion:]-Server zu arbeiten, kann man zur lokalen Verwaltung trotzdem Git einsetzen. Erforderliches Paket installieren:

{{{#!vorlage Paketinstallation
git-svn
}}}

= Links =
 * [http://git-scm.com/ Projektseite] {en}
 * [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Offizielle Dokumentation] {en} 
 * [http://gitref.org/ Git-Referenz für schnellen aber dennoch umfangreichen Einstieg] {en}
 * [http://www.freiesmagazin.de/mobil/freiesMagazin-2008-08-bilder.html#08_08_git Git Howto] {de} - freiesMagazin 08/2008
 * [http://www.github.com/ GitHub] {en} - Kostenlose Git-Repositorien für Open Source-Programme
 * [http://www.gitorious.org/ Gitorious] {en} - dto.
 * [http://www.gitcasts.com/ Screencasts zu Git] {en} 
 * [gnomeapps:giggle:] {en} - GUI für Git
 * [http://blog.fitzer.org/linux/git-einrichtung/ Git Einrichtung] {de} - Blogbeitrag 05/2009 über Repository-Einrichtung auf Server und Client
 * [http://git-wiki.de Git Wiki] {de} – Deutschsprachiges GIT-Wiki (befindet sich im Aufbau)
 * [youtube::][http://www.youtube.com/watch?v=4XpnKHJAok8  Linus Torvalds über Git] {en} 14.5.2007

Versionsverwaltungssysteme (alternativ):
 * [:Bazaar:] - dezentral
 * [:Mercurial:] - dto.
 * [:Subversion:] - zentral

# tag: Versionsverwaltung, Shell