it solutions for special requirements

Schlagwort: bash

How to remove git submodules?

How to remove git submodules? Command init and deinit is very important. Here are some userfull snippets:

git submodule deinit --all -f
git rm sm/my-submodule

Commit chages:

git commit -m "Remove submodule sm/my-submodule"

Clear git cache for this submodule:

rm -rf .git/modules/sm/my-submodule
git status

If you want to replace removed submodule with corresponding files, then add files. Copy submodule files by hand into specific directory.

cp ../tmp/my-submodule-file.txt sm/my-submodule-file.txt
git add .

Finalize Repo:

git submodule deinit --all -f
git submodule init
git submodule update --recursive --remotea

Repo should be pushed and carefully pulled if necessary.

Disable git auto line feed LF

Hier ein kleine Git Schnipsel zum deaktivieren der LF Korrektur. Manchmal verursacht das Probleme wenn man mit Windows & Unix-Derivaten arbeitet. Es mag sinnvoll sein die Auto-Korrektur zu deaktivieren.

Die Einstellung wird über den Parameter –global für alle Repositories festgelegt.

git config --global core.autocrlf false
git config --global core.eol lf

Git … fatal: unsafe repository

Git erlaubt dem User: www-data nicht mehr git Kommandos auszuführen:

fatal: unsafe repository ('/my-test-repo' is owned by someone else)
To add an exception for this directory, call:

um das zu lösen muss man das in dem Repo explizit erlauben:

git config --global --add safe.directory /my-test-repo

Oder man lässt es mit dem www-data User und nutzt dafür einen vorgesehenen User.

Git Cheat: change remote

git remote rename origin old-origin
git remote add origin ssh:[//git@git.....t]

git push -u origin --all

git remote -v

falls das nicht funktioniert, dann kann es an der Verbindung zum GIT Server liegen, also dann:

 ~./ssh keys

prüfen. Hier ein Codeschnipsel zum Wechseln des GIT Servers. Hier findet man die offiziele man-page: https://git-scm.com/docs/git-remote

Git Cheat: remove BIG files

If you commit very big files and want to remove them from the git repo then use this usefull snippet:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch system/backup_V1.sql' \
--prune-empty --tag-name-filter cat -- --all

After removing the file you have to overwrite the remote repo.

You can use this snippet to remove unwanted files from git including all commits! This might be usefull to clean a repo from allready ignored files.

Git SSH issue troubleshooting

Git nutzt unter anderem das SSH Protokoll. Manchmal kann man trotz korrektem ssh-key oder entsprechenden Credentials kein Repository pushen oder pullen. Hier ein pratischer Weg zum troubleshooting der Verbindung:

ssh -vT git@github.com

ssh -vvT git@github.com

ssh -vvvT git@github.com

Der -v Parameter kann noch angepasst werden und gibt die Debug Level 1-3 aus. Die Ausgabe sieht dann wiefolgt aus.

debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: C:\\Users\\Xxxx/.ssh/id_rsa

Falls man den SSH Befehl den GIT benutzt, anpassen muss, kann das über den GIT_SSH_COMMAND Parameter gemacht werden. Mehr Informationen hierzu: https://git-scm.com/docs/git#Documentation/git.txt-codeGITSSHCOMMANDcode

Die Anpassung des GIT_SSH_COMMAND mag für den Zugriff aus einem beschränkten Hoster-System nötig sein*.

*wie z.T. 1&1

Git Cheat: merge

git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development

git checkout master
git merge development
git push -u origin master

Hier eine kleiner Codeschnipsel für eine git merge. Hier findet man die offiziele man-page: https://git-scm.com/docs/git-merge

Git Cheat: user

Anzeigen
git config --global --list
git config --global user.name
git config --global user.email

Editieren
git config --global user.name="xxx"
git config --global user.email="xx@xx.xx"

Löschen
git config --unset user.name
git config --unset user.email

Hier ein Codeschnipsel zur manipulation des Git-Users. Hier findet man die offiziele man-page: https://git-scm.com/docs/git-config

Change permissions, files and directories

How to change all permissions on files and directories? That’s easy, but how to include all directories and files in underlying directories?

It can be done like this:

find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Github und 1&1

Seit Github seine Politik mit internen Projekten geändert hat, setzen wir es exzessiv ein. *träum* Siehe auch unser Getit-Berlin Github. Oder meine eigene JWalczak Github.

Wie man vielleicht schon mal schmerzlich feststellen musste, kann man von bestimmten 1&1 Verträgen (unser geehrter Kunde hat da ein Paket) nicht so einfach zu Github „pull“en.

Folgender Codesnippsel erleichtert uns die Arbeit …

pl.sh
GIT_SSH=/kunden/homepages/yy/dxxxxxx/htdocs/ssh git pull

und

pu.sh
GIT_SSH=/kunden/homepages/yy/dxxxxxx/htdocs/ssh git push --set-upstream origin master

Man schau sich blos den Dateinamen an 😉 „pu.sh“

Natürlich muss man noch die ssh Datei hinzufügen. Die enhält folgendes:

ssh -o UserKnownHostsFile=/dev/null -i /kunden/homepages/yy/dxxxxxx/htdocs/id_rsa -o StrictHostKeyChecking=no $*

Die id_rsa Datei enthält unseren Github ssh-key. Et voilà push und pull funktionieren wie gewohnt. *puhhh*

NACHTRAG: Natürlich noch chown Rechte beachten.

Präsentiert von WordPress & Theme erstellt von Anders Norén