5617
Comment: #language de
|
← Revision 17 as of 2013-08-27 17:12:43 ⇥
6918
|
Deletions are marked like this. | Additions are marked like this. |
Line 7: | Line 7: |
Es ist gute Praxis beim Entwickeln mit ["Mercurial"], jede Änderung isoliert in einem separaten ["Repository"] durchzuführen. Damit vermeidet man, dass nicht zusammengehöriger Code vermischt wird und es das Ergebnis nicht zusammengehöriger Arbeitsschritte lässt sich leichter testen. XXX Let's start out by following that model. | Es ist gute Praxis beim Entwickeln mit Mercurial jede Änderung isoliert in einem separaten [[Repository]] durchzuführen. Damit vermeidet man, dass nicht zusammengehöriger Code vermischt wird, und das Ergebnis nicht zusammengehöriger Arbeitsschritte lässt sich leichter testen. Lass uns anfangen, indem wir diesem Modell folgen. |
Line 9: | Line 9: |
Our silly goal is to get the "hello, world" program to print another line of output. First, we create a new repository called {{{my-hello-new-output}}}, by cloning from {{{my-hello}}}, for our little project. | Unser simples Ziel ist es, das "Hallo Welt!"-Program dazu zu bringen eine weitere Zeile auszugeben. Als erstes erzeugen wir ein neues Repository, das wir {{{my-hello-new-output}}} nennen, in dem wir von {{{my-hello}}} für unser kleines Projekt klonen. |
Line 16: | Line 16: |
In this case, the clone command prints no output if it succeeds. | In diesem Falle wird der "clone"-Befehl nichts ausgeben, wenn er erfolgreich ist. |
Line 18: | Line 18: |
'''Note:''' Notice that we have given our new ["Repository"] a descriptive name, basically identifying the purpose of the ["Repository"]. Since making a ["Clone"] of a ["Repository"] in ["Mercurial"] is cheap, we will quickly accumulate many slightly different repositories. If we do not give these repositories descriptive names, we will rapidly lose the ability to tell them apart. | '''Hinweis:''' ''Beachte, dass wir unserem neuen [[Repository]] einen beschreibenden Namen gegeben haben, der den grundsätzlichen Zweck des [[Repository]] beschreibt. Da das Klonen eines [[Repository]] in [[Mercurial]] "billig" ist, werden wir bald eine Menge etwas unterschiedlicher Repositories ansammeln. Wenn wir diesen keine beschreibenden Namen geben, werden wir schnell Probleme haben, diese auseinander zu halten.'' |
Line 20: | Line 20: |
Now it's time to make a change in the new repository. Let's go into the WorkingDirectory, which is simply our name for the directory where all the files are, and modify the source code with our favorite editor: | Nun ist es an der Zeit eine Änderung in unserem neuen [[Repository]] zu machen. Lass uns dazu in unser Arbeitsverzeichnis ([[WorkingDirectory|working directory]]) gehen, welches einfach nur der Name des Verzeichnisses ist, in dem sich all unsere Dateien befinden und modifiziere dort den Quellcode mit deinem Lieblingseditor: |
Line 27: | Line 27: |
The contents of {{{hello.c}}} initially look like this: | Der Inhalt von {{{hello.c}}} sollte beim ersten Öffnen so aussehen: |
Line 48: | Line 48: |
Let's edit {{{main}}} so that it prints an extra line of output: | Lass uns die {{{main}}}-Funktion so editieren, dass sie noch eine zusätzliche Zeile ausgibt: |
Line 61: | Line 61: |
Once we're done, we quit out of our favorite editor, and we're done. That's it. The edit is now ready for us to create a ChangeSet. | Wenn wir soweit sind, können wir die Datei speichern, unseren Lieblingseditor schließen und sind fertig, das wars. Nach dieser Änderung sind wir bereit ein ChangeSet zu erstellen. |
Line 63: | Line 63: |
But what if we're interrupted, and we've forgotten what changes are going to make it into the ChangeSet once we create it? For this, we use the {{{status}}} command. | Aber was ist, wenn wir gestört wurden und vergessen haben, welche Änderungen in das ChangeSet kommen werden, wenn wir es erstellen? In diesem Fall nutzen wir den {{{status}}} Befehl. |
Line 70: | Line 70: |
The output is terse, but prefix {{{M}}} is simply telling us that {{{hello.c}}} has been modified, so our change is ready to go into a ChangeSet. | Die Ausgabe ist zwar knapp, jedoch sagt uns das Präfix {{{M}}}, dass {{{hello.c}}} verändert wurde ('''M''' -> ''modified''), also die Änderung in den ChangeSet aufgenommen wird. |
Line 72: | Line 72: |
We may also examine the actual changes we have made to the file using the {{{diff}}} command: | Die eigentliche Änderung, welche wir gemacht haben, können wir uns aber auch ansehen, indem wir den {{{diff}}}-Befehl nutzen: |
Line 88: | Line 88: |
<!> In case we wish to '''discard''' our changes and start over, we may use the {{{revert}}} command to restore hello.c to its unmodified state (or use the -a option to revert all files). Just make sure you know this is what you really want. | <!> Für den Fall, dass wir unsere Änderung '''verwerfen''' und noch einmal von vorne anfangen wollen, können wir den {{{revert}}}-Befehl nutzen, um hello.c in seinen vorherigen Zustand (vor unserer Modifikation) wiederherzustellen (mit der Option -a werden alle Dateien wiederhergestellt). Aber sei dir vorher sicher, dass es wirklich das ist, was du willst. |
Line 94: | Line 94: |
The act of creating a ChangeSet is called ["Commit"]ting it. We perform a ["Commit"] using the {{{commit}}} command: | Der Schritt einen ChangeSet zu erstellen nennt sich Committing. Wir führen einen Commit mit dem Befehl {{{commit}}} durch: |
Line 100: | Line 100: |
This drops us into an editor, and presents us with a few cryptic lines of text. | Das {{{commit}}} bringt uns in einen Editor und zeigt uns ein paar kryptische Textzeilen. |
Line 102: | Line 102: |
'''Note:''' The default editor is {{{vi}}}. This can be changed using the {{{EDITOR}}} or {{{HGEDITOR}}} environment variables. Also, the manifest hash might be different, depending on how you typed and saved the file. | '''Hinweis:''' ''Der Standard-Editor ist {{{vi}}}. Dies kann durch das Umstellen der Umgebungsvariablen {{{EDITOR}}} oder {{{HGEDITOR}}} geändert werden. Auch der Wert für {{{manifest hash}}} kann verschieden sein, je nachdem wie du die Datei gespeichert oder geschrieben hast.'' |
Line 110: | Line 110: |
The first line is empty and the lines that follow identify the files that will go into this ChangeSet. | Die erste Zeile ist leer, und die darauf folgenden Zeilen identifizieren die Datei(en), die in das ChangeSet kommen werden. |
Line 112: | Line 112: |
To ["Commit"] the ChangeSet, we must describe the reason for it. This is usually called a ChangeSet comment. Let's type something like this: | Um den Commit zu vollenden müssen wir den Grund für das Changeset beschreiben. Dies wird üblicherweise als ChangeSet ''comment'' bezeichnet, ein Kommentar also, der uns und anderen helfen soll, die Änderungen zu beschreiben, die zum ChangeSet geführt haben. Lass uns so etwas wie das Folgende dort hinein schreiben: |
Line 120: | Line 120: |
Next, we save the test and quit the editor, and, if all goes well, the {{{commit}}} command will exit and prints no output. <!> If you quit the editor without saving the text, {{{commit}}} will abort the operation, so you may change your mind before committing. | Als nächstes speichern wir den Test und verlassen den Editor. Wenn alles gut läuft, wird der {{{commit}}}-Befehl ohne weitere Ausgabe beendet. |
Line 122: | Line 122: |
'''Note:''' Before committing anything into a serious project, you may want to configure a meaningful username in {{{~/.hgrc}}}; see ["QuickStart2"]. | <!> Wenn du den Editor verlässt ohne vorher den Text zu speichern, wird der {{{commit}}} die Operation abbrechen, und man kann alles nocheinmal überdenken bevor man den {{{commit}}} durchführt. |
Line 124: | Line 124: |
Let's see what the {{{status}}} command will tell us now? | '''Hinweis:''' ''Bevor man etwas in einem ernsthaften Projekt "committed", sollte man einen aussagekräftigen Benutzernamen in {{{~/.hgrc}}} setzen. Siehe hierzu auch nach Hinweisen in [[QuickStart2]].'' Nun schauen wir mal, was der {{{status}}}-Befehl uns sagt. |
Line 130: | Line 132: |
Nothing! Our change has been ["Commit"]ted to a ChangeSet, so there's no modified file in need of a commit. Our ["Tip"] now matches our working directory contents. | Nichts, keine Ausgabe! Unsere Änderung wurde in den ChangeSet "''committed''", also gibt es keine geänderte, neue oder gelöschte Datei, die einen {{{commit}}} benötigt. Unser [[Tip]] stimmt nun mit dem Inhalt des Arbeitsverzeichnisses überein. |
Line 132: | Line 134: |
We can now examine the change history for our new work: | Wir können uns nun einmal die Änderungshistorie unserer neuen Arbeit ansehen: |
Line 144: | Line 146: |
There it is! We've ["Commit"]ted a ChangeSet. | Da ist es! Wir haben mit dem {{{commit}}}-Befehl ein ChangeSet erstellt. |
Line 146: | Line 148: |
'''Note:''' The user, date, and ChangeSetID will of course vary. | '''Hinweis:''' Der Benutzer (user), das Datum (date) und die ChangeSetID werden garantiert variieren. |
Line 148: | Line 150: |
As we discussed in TutorialClone, the new ChangeSet only exists in this repository. This is a critical part of the way ["Mercurial"] works. | Wie wir in dem TutorialClone besprochen haben, existiert das neue ChangeSet nur in diesem lokalen Repository(!). Dies ist wichtig zu merken und der kritische Teil von [[Mercurial]], zu diesem Zeitpunkt hat noch kein anderer Entwickler von unseren Änderungen an unserem Repository ''gehört''. |
Line 150: | Line 152: |
To share changes, we must continue to TutorialShareChange. | Um Änderungen auch anderen mitzuteilen, müssen wir mit dem GermanTutorialShareChange weiter machen. |
Tutorial - Eine erste Änderung durchführen
Wir bauen auf GermanTutorialHistory auf und befinden uns in unserem my-hello-Repository, dass wir in GermanTutorialClone geklont haben.
Es ist gute Praxis beim Entwickeln mit Mercurial jede Änderung isoliert in einem separaten Repository durchzuführen. Damit vermeidet man, dass nicht zusammengehöriger Code vermischt wird, und das Ergebnis nicht zusammengehöriger Arbeitsschritte lässt sich leichter testen. Lass uns anfangen, indem wir diesem Modell folgen.
Unser simples Ziel ist es, das "Hallo Welt!"-Program dazu zu bringen eine weitere Zeile auszugeben. Als erstes erzeugen wir ein neues Repository, das wir my-hello-new-output nennen, in dem wir von my-hello für unser kleines Projekt klonen.
$ cd .. $ hg clone my-hello my-hello-new-output
In diesem Falle wird der "clone"-Befehl nichts ausgeben, wenn er erfolgreich ist.
Hinweis: Beachte, dass wir unserem neuen Repository einen beschreibenden Namen gegeben haben, der den grundsätzlichen Zweck des Repository beschreibt. Da das Klonen eines Repository in Mercurial "billig" ist, werden wir bald eine Menge etwas unterschiedlicher Repositories ansammeln. Wenn wir diesen keine beschreibenden Namen geben, werden wir schnell Probleme haben, diese auseinander zu halten.
Nun ist es an der Zeit eine Änderung in unserem neuen Repository zu machen. Lass uns dazu in unser Arbeitsverzeichnis (working directory) gehen, welches einfach nur der Name des Verzeichnisses ist, in dem sich all unsere Dateien befinden und modifiziere dort den Quellcode mit deinem Lieblingseditor:
$ cd my-hello-new-output $ vi hello.c
Der Inhalt von hello.c sollte beim ersten Öffnen so aussehen:
/*
* hello.c
*
* Placed in the public domain by Bryan O'Sullivan
*
* This program is not covered by patents in the United States or other
* countries.
*/
#include <stdio.h>
int main(int argc, char **argv)
{
printf("hello, world!\n");
return 0;
}
Lass uns die main-Funktion so editieren, dass sie noch eine zusätzliche Zeile ausgibt:
(...)
int main(int argc, char **argv)
{
printf("hello, world!\n");
printf("sure am glad I'm using Mercurial!\n");
return 0;
}
Wenn wir soweit sind, können wir die Datei speichern, unseren Lieblingseditor schließen und sind fertig, das wars. Nach dieser Änderung sind wir bereit ein ChangeSet zu erstellen.
Aber was ist, wenn wir gestört wurden und vergessen haben, welche Änderungen in das ChangeSet kommen werden, wenn wir es erstellen? In diesem Fall nutzen wir den status Befehl.
$ hg status M hello.c
Die Ausgabe ist zwar knapp, jedoch sagt uns das Präfix M, dass hello.c verändert wurde (M -> modified), also die Änderung in den ChangeSet aufgenommen wird.
Die eigentliche Änderung, welche wir gemacht haben, können wir uns aber auch ansehen, indem wir den diff-Befehl nutzen:
$ hg diff diff -r 82e55d328c8c hello.c --- a/hello.c Fri Aug 26 01:21:28 2005 -0700 +++ b/hello.c Fri Sep 30 10:27:47 2005 +0800 @@ -12,5 +12,6 @@ int main(int argc, char **argv) { printf("hello, world!\n"); + printf("sure am glad I'm using Mercurial!\n"); return 0; }
Für den Fall, dass wir unsere Änderung verwerfen und noch einmal von vorne anfangen wollen, können wir den revert-Befehl nutzen, um hello.c in seinen vorherigen Zustand (vor unserer Modifikation) wiederherzustellen (mit der Option -a werden alle Dateien wiederhergestellt). Aber sei dir vorher sicher, dass es wirklich das ist, was du willst.
$ hg revert hello.c
Der Schritt einen ChangeSet zu erstellen nennt sich Committing. Wir führen einen Commit mit dem Befehl commit durch:
$ hg commit
Das commit bringt uns in einen Editor und zeigt uns ein paar kryptische Textzeilen.
Hinweis: Der Standard-Editor ist vi. Dies kann durch das Umstellen der Umgebungsvariablen EDITOR oder HGEDITOR geändert werden. Auch der Wert für manifest hash kann verschieden sein, je nachdem wie du die Datei gespeichert oder geschrieben hast.
(empty line) HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c
Die erste Zeile ist leer, und die darauf folgenden Zeilen identifizieren die Datei(en), die in das ChangeSet kommen werden.
Um den Commit zu vollenden müssen wir den Grund für das Changeset beschreiben. Dies wird üblicherweise als ChangeSet comment bezeichnet, ein Kommentar also, der uns und anderen helfen soll, die Änderungen zu beschreiben, die zum ChangeSet geführt haben. Lass uns so etwas wie das Folgende dort hinein schreiben:
Express great joy at existence of Mercurial HG: manifest hash 14595beb70bcfb74bf227437d70c38878421c944 HG: changed hello.c
Als nächstes speichern wir den Test und verlassen den Editor. Wenn alles gut läuft, wird der commit-Befehl ohne weitere Ausgabe beendet.
Wenn du den Editor verlässt ohne vorher den Text zu speichern, wird der commit die Operation abbrechen, und man kann alles nocheinmal überdenken bevor man den commit durchführt.
Hinweis: Bevor man etwas in einem ernsthaften Projekt "committed", sollte man einen aussagekräftigen Benutzernamen in ~/.hgrc setzen. Siehe hierzu auch nach Hinweisen in QuickStart2.
Nun schauen wir mal, was der status-Befehl uns sagt.
$ hg status
Nichts, keine Ausgabe! Unsere Änderung wurde in den ChangeSet "committed", also gibt es keine geänderte, neue oder gelöschte Datei, die einen commit benötigt. Unser Tip stimmt nun mit dem Inhalt des Arbeitsverzeichnisses überein.
Wir können uns nun einmal die Änderungshistorie unserer neuen Arbeit ansehen:
$ hg log changeset: 2:a58809af174d tag: tip user: mpm@selenic.com date: Fri Aug 26 01:26:28 2005 -0700 summary: Express great joy at existence of Mercurial (...)
Da ist es! Wir haben mit dem commit-Befehl ein ChangeSet erstellt.
Hinweis: Der Benutzer (user), das Datum (date) und die ChangeSetID werden garantiert variieren.
Wie wir in dem TutorialClone besprochen haben, existiert das neue ChangeSet nur in diesem lokalen Repository(!). Dies ist wichtig zu merken und der kritische Teil von Mercurial, zu diesem Zeitpunkt hat noch kein anderer Entwickler von unseren Änderungen an unserem Repository gehört.
Um Änderungen auch anderen mitzuteilen, müssen wir mit dem GermanTutorialShareChange weiter machen.