notebook/IT/Git/Git.md
vincent a065caf8cc
All checks were successful
continuous-integration/drone/push Build is passing
correct uppercase
2022-10-09 17:11:12 +02:00

97 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# git
![git](../img/git.jpg)
## Clone with submodule recurse
add _--recurse-submodules_ to clone command
## Add in staging only a part of modification done in a file
`git add -p`
this will ask if you want to add each modification with this option:
- _y_ - Yes, add this hunk
- _n_ - No, dont add this hunk
- _d_ - No, dont add this hunk and all other remaining hunks. Useful if youve already added what you want to, and want to skip over the rest
- _s_ - Split the hunk into smaller hunks. This only works if theres unchanged lines between the changes in the displayed hunk, so this wouldnt have any effect in the example above
- _e_ - Manually edit the hunk. This is probably the most powerful option. As promised, it will open the hunk in a text editor and you can edit it to your hearts content
## delete a file only from git repository
`git rm -rf --cached`
## delete a file from complete history
be carefull can't push repo last time use
need to be in a repo with no modification
```bash
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $file" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
```
## create a repo from other repo subfoler
- clone the first repo
- go in this directory
- launch
```bash
git filter-branch --prune-empty --subdirectory-filter "subdirectory/path" master
```
- push in your new git repo
## changing email adress
```bash
$ git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
then
GIT_AUTHOR_NAME="Scott Chacon";
GIT_AUTHOR_EMAIL="schacon@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
```
## example de déclencheur git dans un dépot git
```bash
#!/bin/bash
GIT_REPO=`pwd`
SITE_NAME=notebook
TMP_GIT_CLONE="/tmp/$SITE_NAME"
PUBLIC_WWW="/usr/share/nginx/html/$SITE_NAME"
# get branch name
if ! [ -t 0 ]; then
read -a ref
fi
IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"
if [ "master" == "$branch" ]; then
mkdir -p $TMP_GIT_CLONE
echo "download repo"
git clone --recursive $GIT_REPO $TMP_GIT_CLONE
cd $TMP_GIT_CLONE
export PATH="$HOME/.local/bin:$PATH"
make install -e BUILDDIR=$PUBLIC_WWW
echo "Cleaning up"
rm -Rf $TMP_GIT_CLONE
fi
exit
```
### use git ssh over proxy socks
`export GIT_SSH_COMMAND='ssh -o ProxyCommand="nc -X 5 -x 127.0.0.1:1080 %h %p"'`
### use git http over proxy socks
`git config http.proxy 'socks5://127.0.0.1:1080`