2x1=10

because numbers are people, too
Persönliches
Fotografie
Programmierung
    • Git für SVN-Umsteiger

      Eine gute Über­sicht für Git-Neulinge aus dem Sub­ver­sion-Land gibt es hier zu sehen. Da für mich für den direk­ten Quere­in­stieg nur eine Hand­voll der Befehle wichtig waren, hier eine kurze Über­sicht ohne Anspruch auf Voll­ständigkeit.

      git remote add origin http://rechner.net/repository.git
      git remote add mirror git@mirror.org/repository-mirror.git
      
      git pull origin master
      
      git branch experimental
      git checkout experimental
      
      git add neuedatei.txt
      git rm foobar.exe
      git commit -m "Dinge geändert."
      
      git push mirror experimental
      
      git checkout master
      git merge experimental
      

      Was es mit alle­dem auf sich hat und noch einiges mehr, ste­ht in den fol­gen­den Abschnit­ten.

      Neues Git-Repository anlegen

      Das ist ein Einzeil­er:

      git init
      

      Anders als Sub­ver­sion ver­wal­tet Git das Repos­i­to­ry in einem einzel­nen .git-Verze­ich­nis im Pro­jek­t­root. Inner­halb dieses Verze­ich­niss­es liegt auch eine Datei Namens config, die die pro­jek­t­spez­i­fis­chen — Vor­sicht: lokalen! — Ein­stel­lun­gen bein­hal­tet.

      Soll das Repos­i­to­ry nur als “extern­er” Daten­spe­ich­er, nicht aber als Arbeit­skopie dienen, kann das Repos­i­to­ry als sog. Bare-Repos­i­to­ry mit dem Flag --bare angelegt wer­den:

      git init --bare
      

      Projekt auschecken und updaten

      Um das Pro­jekt ini­tial auszucheck­en (svn checkout) wird der Befehl git clone benutzt. Das Klo­nen erzeugt eine Kopie des aus­gewählten Repos­i­to­ries im angegebe­nen Zielord­ner. Wird kein Ord­ner ange­bgeben, wird der Name des Repos­i­to­ries als Ord­ner­name gewählt.

      git clone git://url.zum/repository zielordner
      

      Repos­i­to­ries kön­nen entwed­er lokal als Dateip­fad oder ent­fer­nt per http://, git:// oder ssh:// addressiert wer­den. Wie man dabei Schreibar­beit spart ste­ht im näch­sten Abschnitt über Remotes.

      Ist ein Pro­jekt bere­its aus­gecheckt und soll nur auf den neuesten Stand gebracht wer­den (svn update) wird der Befehl git pull benutzt.

      git pull
      

      Dieser Befehl ist eine Kurz­form von git fetch name-eines-branches, gefol­gt von git merge name-eines-branches, wobei als Name des Branch­es der aktuell angewählte Branch ver­wen­det wird. Nach einem, ini­tialen clone heißt dieser Branch master.

      Remotes

      Damit es nicht immer nötig ist, die volle URL eines exter­nen Repos­i­to­ries anzugeben, lassen sich soge­nan­nte remotes ein­richt­en. Nick­names, wenn man so will:

      git remote add name-des-remotes http://url.zum/repository
      

      Danach ist es etwa möglich, den Mas­ter-Branch des Repos­i­to­ries ein­fach mit­tels:

      git pull name-des-remotes master
      

      zu behiehen. Die offizielle Quelle eines Repos­i­to­ries — so vorhan­den — wird typ­is­cher­weise als origin beze­ich­net.

      Historie und Änderungen anzeigen

      Änderun­gen lassen sich mit­tels git status und git diff anzeigen, die His­to­rie erhält man mit­tels git log.

      git status
      git diff
      git log
      

      Dateien hinzufügen, löschen, verschieben, kopieren, ignorieren …

      Die Befehle svn add (hinzufü­gen), svn rm (löschen), svn cp (kopieren) und svn mv (ver­schieben) haben in Git nur zwei Gegen­parts:

      git add Dateiname
      git rm Dateiname
      git mv AlterDateiname NeuerDateiname
      

      Da Git Inhalte, nicht Dateien trackt gibt es für das Kopieren keinen explizitenn Befehl — Git erken­nt diese Oper­a­tion prinzip­iell selb­st­ständig. Es ist allerd­ings rel­e­vant, dass kopierte wieder per git add svn add NeuerDateiname hinzuge­fügt wer­den; Von Hand ver­schobene Dateien müssen per svn del AlterDateiname zusät­zlich als gelöscht markiert wer­den. Es ist dabei egal, ob dieser Aufruf im betrof­fe­nen Ord­ner oder höher in der Hier­ar­chie erfol­gt.

      Um Dateien zu ignori­eren, wird in dem Ord­ner, ab dem die Ignori­er-Regeln gel­ten sollen eine Datei namens .gitignore angelegt. Diese bein­hal­tet Zeilen­weise Datei- oder Ord­ner­na­men, welche auch Wild­cards in Form des Sternchens enthal­ten kön­nen. Beispiel:

      *.exe
      .deleteme
      

      Da Dateien mit führen­dem Punkt unter Win­dows nicht direkt im Explor­er angelegt wer­den kön­nen, kann man sich behelfen, indem man die Datei gitignore.txt nen­nt und dann in der Kom­man­dozeile wie fol­gt umbe­nen­nt:

      mv gitignore.txt .gitignore
      

      Änderungen einchecken

      Sollen Änderun­gen eingecheckt wer­den (svn commit) wird der Befehl git commit benutzt. Zuvor müssen geän­derte Dateien — auch, wenn sie bere­its dem Pro­jekt zuvor bere­its hinzuge­fügt wur­den — per git add als staged markiert wer­den.
      Anders gesagt: Es obliegt dem Benutzer, auszuwählen, welche Änderun­gen eingecheckt wer­den sollen.

      git add Datei1 Datei2 Datei3
      git commit
      

      Sollen alle Änderun­gen com­mit­ed wer­den, gilt fol­gen­der Short­cut:

      git add .
      git commit
      

      Oder ganz ein­fach:

      git commit -a
      

      Das Stag­ing von Dateien ist eine nicht zwin­gend triv­iale Angele­gen­heit, erlaubt aber sehr inter­es­sante Kniffe — etwa das teil­weise Eincheck­en ein­er geän­derten Datei. Mehr dazu (und zum Prob­lem der ver­wurschtel­ten Änderun­gen) im Artikel The Thing About Git.

      Alle Änderungen verwerfen

      Um wirk­lich alle Änderun­gen seit dem let­zten com­mit radikal zu ver­w­er­fen, kann git reset mit dem Para­me­ter --hard ver­wen­det wer­den.

      git reset --hard
      

      Mehr dazu (und zum Kor­rigieren bere­its eingecheck­ter Änderun­gen) im Git Book im Kapi­tel Undo­ing in Git.

      Änderungen an ein Repository pushen

      Da Git dezen­tral­isiert läuft, gibt es kein zen­trales Repos­i­to­ry wie bei Sub­ver­sion. Sollen die Com­mits den­noch an ein bes­timmtes Repos­i­to­ry geschickt wer­den — etwa, um einen pseudozen­tralen Work­flow nachzu­bilden — ver­wen­det man den Befehl svn push.

      git push [name-des-remotes] [branch]
      

      Vor­sicht: Man sollte es unter­lassen, an Repos­i­to­ries zu pushen, die nicht mit­tels git init --bare (Bare-Repos­i­to­ry) angelegt wur­den!

      Branching, switching und merging

      Ein Branch wird ähn­lich in Sub­ver­sion mit­tels git branch erzeugt, das Switchen geschieht allerd­ings per git checkout:

      git branch neuer-branch
      git checkout neuer-branch
      

      Vor einem Check­out müssen alle Änderun­gen com­mit­ed sein; Ist das nicht erwün­scht, hil­ft die Tech­nik des stash­ings.

      In welchem Branch man sich befind­et und welche Branch­es lokal ver­füg­bar sind (d.h., wenn sie mit git fetch oder git pull gezo­gen wur­den), lässt sich mit­tels git branch ohne Para­me­ter anzeigen:

      git branch
      

      Soll ein beste­hen­der Branch in den aktuellen gemergt wer­den, ver­wen­det man — nahe­liegend — git merge:

      git merge zu-mergender-branch
      

      Alter­na­tiv kann man den bere­its bekan­nten Short­cut git pull benutzen, wenn es sich um ein ent­fer­ntes Repos­i­to­ry han­delt:

      git pull git://url.zum/repository zu-mergender-branch
      git pull name-des-remotes  zu-mergender-branch
      
      April 2nd, 2011 GMT +2 von
      Markus
      2011-04-2T00:03:34+02:00 2011-04-2T21:14:24+02:00 · 0 Kommentare
      git svn
      Version Control

      Hinterlasse einen Kommentar

      Hier klicken, um das Antworten abzubrechen.

    1. « newer
    2. 1
    3. …
    4. 35
    5. 36
    6. 37
    7. 38
    8. 39
    9. 40
    10. 41
    11. 42
    12. 43
    • Kategorien

      • .NET
        • ASP.NET
        • Core
        • DNX
      • Allgemein
      • Android
      • Data Science
      • Embedded
      • FPGA
      • Humor
      • Image Processing
      • Kalman Filter
      • Machine Learning
        • Caffe
        • Hidden Markov Models
        • ML Summarized
        • Neural Networks
        • TensorFlow
      • Mapping
      • MATLAB
      • Robotik
      • Rust
      • Signal Processing
      • Tutorial
      • Version Control
    • Neueste Beiträge

      • Summarized: The E-Dimension — Why Machine Learning Doesn’t Work Well for Some Problems?
      • Use your conda environment in Jupyter Notebooks
      • Building OpenCV for Anaconda Python 3
      • Using TensorFlow’s Supervisor with TensorBoard summary groups
      • Getting an image into and out of TensorFlow
    • Kategorien

      .NET Allgemein Android ASP.NET Caffe Core Data Science DNX Embedded FPGA Hidden Markov Models Humor Image Processing Kalman Filter Machine Learning Mapping MATLAB ML Summarized Neural Networks Robotik Rust Signal Processing TensorFlow Tutorial Version Control
    • Tags

      .NET Accelerometer Anaconda Bitmap Bug Canvas CLR docker FPGA FRDM-KL25Z FRDM-KL26Z Freescale git Gyroscope Integration Drift Intent J-Link Linear Programming Linux Magnetometer Matlab Mono Naismith OpenCV Open Intents OpenSDA Optimization Pipistrello Player/Stage PWM Python Sensor Fusion Simulink Spartan 6 svn tensorflow Tilt Compensation TRIAD ubuntu Windows Xilinx Xilinx SDK ZedBoard ZYBO Zynq
    • Letzte Kommetare

      • Lecke Mio bei Frequency-variable PWM generator in Simulink
      • Vaibhav bei Use your conda environment in Jupyter Notebooks
      • newbee bei Frequency-variable PWM generator in Simulink
      • Markus bei Using TensorFlow’s Supervisor with TensorBoard summary groups
      • Toke bei Using TensorFlow’s Supervisor with TensorBoard summary groups
    • Blog durchsuchen

    • April 2011
      M D M D F S S
          Nov »
       123
      45678910
      11121314151617
      18192021222324
      252627282930  
    • Self

      • Find me on GitHub
      • Google+
      • Me on Stack­Ex­change
      • Ye olde blog
    • Meta

      • Anmelden
      • Beitrags-Feed (RSS)
      • Kommentare als RSS
      • WordPress.org
    (Generiert in 1,056 Sekunden)

    Zurück nach oben.