GIT
credentials and config
- ~/.netrc
machine git.csgalileo.org login blabla password blabla
- ~/.gitconfig
[user] name = Stefano Scipioni email = blabla [core] autocrlf = input #safecrlf = true editor = vim [http] sslverify = false [alias] co = checkout ci = commit st = status br = branch hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short type = cat-file -t dump = cat-file -p [push] default = simple [color] ui = auto
New repo
NAME=project.git mkdir $NAME cd $NAME git init --bare mv hooks/post-update* hooks/post-update chmod +x hooks/post-update git update-server-info
change origin
git remote -v
git remote set-url origin http://git.csgalileo.org/livenet-server.git
check origin
git remote show origin
if prune needed (on server restart apache if dav is used)
git remote prune origin
git push --set-upstream origin master
create branch with current changes
git checkout -b newBranch
tag
git tag -a v1.1 -m "versione 1.1" git push origin v1.1
new remote branch
create locally
git branch [name_of_your_new_branch]
git checkout [name_of_your_new_branch]
create or update remotly
git push --set-upstream origin [name_of_branch]
view remote branches
git fetch -v
fetch remote branches
git checkout -b [branch] origin/[branch]
delete remote branch
git push origin --delete [branch] # and locally git branch -d [branch]
rename branch (local and remote)
git branch -m new-name # Delete the old-name remote branch and push the new-name local branch. git push origin :old-name new-name # Reset the upstream branch for the new-name local branch. git push origin -u new-name
Preserve specific files while merging
start by defining a merge driver that would always favor our current version of the file
git config --global merge.ours.driver true
into repo mark examplefile.json to use that driver instead of the standard one:
echo 'examplefile.json merge=ours' >> .gitattributes
integrate changes from one branch into another branch
merging
from feature branch to master
git checkout feature git merge master
or rebasing
git checkout feature git rebase -i master # if remote feature is present force push on origin git push --force origin feature
rebase remote branch (or original fork) with local branch
add forked repo if none (git remote -v)
git remote add upstream https://github.com/pjreddie/darknet.git
rebase remote on master
git fetch upstream
git checkout master
git merge upstream/master
git push
merge specific commit from branch to another
git co <branch-target> git cherry-pick <commit>
Home Assistant
git clone https://github.com/scipioni/home-assistant.git cd home-assistant git remote add upstream https://github.com/home-assistant/home-assistant.git git pull upstream dev
apache git
apt install apache2
a2enmod dav_lock dav dav_fs macro
systemctl restart apache2
submodule
cd <submodule>
git checkout master
git branch -u origin/master master
cd <parent>
git config -f .gitmodules submodule.<submodule>.branch master