Git

Ekkart Kleinod  • 

master in main umbenennen

  1. master in main umbenennen, --move behält die History bei

     $ git branch --move master main
    
  2. ins Repository pushen und Upstream setzen

     $ git push --set-upstream origin main
    
  3. main in gitlab als default branch setzen

    • Settings → Repository → Default Branch
    • Settings → Repository → Protected Branches
      • protect main
      • unprotect master
    • was einem sonst noch so einfällt
  4. master aus dem Repository löschen

     $ git push --delete origin master
    
  5. im Fall von warning: ignoring broken ref refs/remotes/origin/HEAD

     $ git remote set-head origin main
    
  6. Integrationen/Nutzung aktualisieren

    • was einem so einfällt
      • CI/CD
      • readthedocs

Remote-Branches updaten

Gelöschte Branches werden bei pull und fetch nicht übernommen (gelöscht). Dafür muss das Flag prune gesetzt sein:

$ git fetch -p

Löschen von Remote-Branches

Erst prüfen, ob der Branch bereits gelöscht und noch nicht übernommen wurde.

$ git fetch -p

Dann:

$ git push <remote_name> --delete <branch_name>

also z.B.

$ git push origin --delete feature/fxmlparts

Branching-Modell

Branch anlegen

$ git checkout -b <branch>

Branch wechseln

$ git checkout <branch>

Branch in aktuell ausgecheckten Branch mergen (kein Fast Forward)

$ git merge --no-ff <branch>

Branch löschen

$ git branch -d <branch>

Branches auflisten (lokal, dann remote)

$ git branch
$ git branch --remote

Tag erstellen

$ git tag -a <tag>

Repository von einem Server auf einen anderen kopieren

Und das Ganze mit Aussuchen, welche branches und tags übernommen werden. Ich gehe davon aus, dass das Repo vorher und nachher mit origin bezeichnet werden soll.

Schritte übernommen von https://developer.atlassian.com/blog/2016/01/totw-copying-a-full-git-repo/

  1. alles eingecheckt haben, lieber doppelt prüfen, pushen, sicher ist sicher
  2. Liste aller branches anzeigen lassen

     $ git branch -a
    
  3. alle branches auschecken, die ins neue Repository übernommen werden sollen

     $ git checkout <branch>
    
  4. tags holen

     $ git fetch --tags
    
  5. nicht benötigte tags löschen

     $ git tag -d <tag>
    
  6. prüfen, ob lokal alles ok ist und übernommen werden kann

     $ git tag
     $ git branch -a
    
  7. Link zum origin-Repository löschen

     $ git remote rm origin
    
  8. Neues Repository als origin verlinken

     $ git remote add origin <repo-url>
    
  9. Alles in Repo pushen

     $ git push origin --all
     $ git push --tags
    
  10. evtl. branches wieder mit Repo-branches verlinken

    $ git branch --set-upstream-to=origin/<branch> <branch>
    
  11. fertig

submodule löschen

$ git fetch -p
$ git pull
$ git submodule deinit <path_to_submodule>
$ git rm <path_to_submodule>
$ git commit -m "Removed submodule"
$ rm -rf .git/modules/<path_to_submodule>
$ git push
$ git fetch -p

Mehrere Git-Profile auf einem Rechner

Das Problem: in einem Projekt bin ich "ekleinod@edgesoft.de", im anderen Projekt "ekkart.kleinod@fokus.fraunhofer.de"

In der normalen .gitconfig kann ich nur eine Person sein.

Lösung: Profile abhängig vom Verzeichnis laden, in dem sie liegen (geht auch mit Branches, für mich reichen aber Verzeichnisse). Dazu habe ich die Ideen von Sohan Mondal adaptiert.

Man muss zwei Schritte erledigen:

  1. Profildateien für jedes Profil anlegen

    .gitconfig_edgesoft

     [user]
         name = Ekkart Kleinod
         email = ekleinod@edgesoft.de
    

    .gitconfig_fokus

     [user]
         name = Ekkart Kleinod
         email = ekkart.kleinod@fokus.fraunhofer.de
    
  2. in der globalen .gitconfig Profile den Verzeichnissen zuordnen

    .gitconfig (Windows)

     [includeIf "gitdir:C:/working/git/"]
       path = .gitconfig_edgesoft
     [includeIf "gitdir:C:/working/fokus-git/"]
       path = .gitconfig_fokus
    

    .gitconfig (Linux)

     [includeIf "gitdir:~/working/git/"]
       path = .gitconfig_edgesoft
     [includeIf "gitdir:~/working/fokus-git/"]
       path = .gitconfig_fokus
    

Lösung 2: die config des jeweiligen Repositories anpassen. Finde ich umständlich, ist nur der Vollständigkeit erwähnt.