git

Git is a distributed version control and source code management (SCM) system.

http://git-scm.com/

SSH public key generation

   1 ls ~/.ssh
   2 ssh-keygen # create ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub keys
   3 cat ~/.ssh/id_rsa.pub # shows key to be sent to the git server admin
   4 

Config

   1 git config --global user.name "John Doe"
   2 git config --global user.email johndoe@example.com
   3 git config --list

Local config for repository

   1 git config user.name "John Doe"
   2 git config user.email johndoe@example.com
   3 git config --local --list
   4 cat .git/config # [user]
   5 

Create repository

   1 cd <project>
   2 git init #create folder .git
   3 touch README.md
   4 touch .gitignore
   5 git add . 
   6 git commit -m 'Initial commit'
   7 git remote add origin git@gitserver:/opt/git/project.git # setup origin for repository
   8 git push origin master

Edit .gitignore for Java

Sample .gitignore

*~
.metadata
*.class
*.jar
*.war 
*.ear 
*.zip
target/

Clone repository

   1 git clone git@git.server.net:repository.git # by ssh
   2 git clone https://git.server.net/repository.git #by https
   3 cd repository

Branch creation based on current branch

   1 git branch #show current branch
   2 git checkout -b B/20130801/BRANCH-XYZ master # create new branch based on branch master
   3 git branch -m B/20130801/BRANCH-XYZ B/20130801/BRANCH-ZZZ # rename local branch
   4 git push origin B/20130801/BRANCH-ZZZ # push branch B/20130801/BRANCH-ZZZ to remote
   5 

Commit to remote branch

   1 git commit -am 'Message commit xyz ' --all #commit locally
   2 git pull origin B/20130801/BRANCH-ZZZ # sync with remote branch
   3 # fix conflicts and commit conflict resolution
   4 git push origin B/20130801/BRANCH-ZZZ # send changes to remote branch
   5 git commit -am 'Message commit asdf ' --all #commit locally
   6 git pull --rebase origin B/20130801/BRANCH-ZZZ # sync with remote branch with rebase
   7 # fix conflicts and commit conflict resolution
   8 git push origin B/20130801/BRANCH-ZZZ # send changes to remote branch
   9 

Merge to other branch

   1 git checkout master # merge destination branch 
   2 git pull origin master # sync dest branch
   3 git merge --no-ff B/20130801/BRANCH-ZZZ # merge branch B/20130801/BRANCH-ZZZ to branch master
   4 git pull origin master
   5 git push origin master

   1 git checkout development
   2 git checkout -b feature_branch origin/feature_branch
   3 git add .
   4 git commit -m "msg" # commit in feature branch
   5 git checkout development
   6 git pull origin development
   7 git checkout feature_branch
   8 git merge --no-ff development
   9 git pull origin feature_branch
  10 git push origin feature_branch

Reapply .gitignore

   1 cd <projectFolder>
   2 git rm -r -f --cached .
   3 git add .
   4 git status #check files to be commited
   5 

Setup git server on RHEL

http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server

Home folder for git user must have permissions only for that user.

   1 chown git . -R
   2 chgrp git . -R

The bare repositories folders must have permissions only for git user.

   1 chown git . -R
   2 chgrp git . -R

   1 sudo bash 
   2 adduser git
   3 su git
   4 cd
   5 mkdir .ssh
   6 cd .ssh
   7 git --version # git version 1.7.1
   8 
   9 #generate and paste the pub key from my user on local machine
  10 ssh-keygen -f id_rsa -p
  11 cat ~/.ssh/id_rsa.pub #local machine
  12 
  13 # in the git server
  14 cd .ssh # git account
  15 vim authorized_keys  #git server, paste the content of id_rsa.pub
  16 cd ~
  17 chmod 700 .ssh/
  18 chmod 600 .ssh/authorized_keys 
  19 ssh git@bitarus.allowed.org # test connection from local machine
  20 vim /etc/passwd #change shell for git user
  21 git:x:505:505::/home/git:/usr/bin/git-shell 
  22 
  23 # create project on git server
  24 cd /home/git
  25 mkdir hello.git
  26 cd hello.git
  27 git --bare init
  28 
  29 #create project on local machine
  30 cd ~
  31 cd gitRepository
  32 mkdir hello
  33 cd hello
  34 git init
  35 touch README
  36 git add .
  37 git commit -m 'initial commit'
  38 git config --list #check config
  39 git remote add origin git@bitarus.allowed.org:/home/git/hello.git
  40 git push origin master
  41 git log

Revert file to original

Github change from https to ssh

Delete local branch development and checkout remote development branch

Switch between branches

Get remote branch to local branch

Revert to HEAD revision

Make colors show properly on git diff and git log

Change commit message before a push

Files in branch changed between revisions

Clean untracked files and folders

Reset to version in remote repository

Git for windows (git bash)

Join several commits not pushed

Use the git rebase.

Pick (choose) several commits and put them all with the "squash" commit that usually is the most recent one. It may be cancelled using git rebase --abort.

Difference between remote and local branch

GitFlow

New development (new features, non-emergency bug fixes) are built in feature branches:

Feature branches are branched off of the develop branch, and finished features and fixes are merged back into the develop branch when they’re ready for release

When it is time to make a release, a release branch is created off of develop:

The code in the release branch is deployed onto a suitable test environment, tested, and any problems are fixed directly in the release branch. This deploy -> test -> fix -> redeploy -> retest cycle continues until you’re happy that the release is good enough to release to customers.

When the release is finished, the release branch is merged into master and into develop too, to make sure that any changes made in the release branch aren’t accidentally lost by new development.

The master branch tracks released code only. The only commits to master are merges from release branches and hotfix branches.

Hotfix branches are used to create emergency fixes:

They are branched directly from a tagged release in the master branch, and when finished are merged back into both master and develop to make sure that the hotfix isn’t accidentally lost when the next regular release occurs.

Create local branch from commit in current branch

Show differences in added/staged files with git add

   1 git add filex
   2 git status
   3 git diff --staged
   4 git diff --cached

Stash

   1 git stash
   2 git stash list
   3 git stash show -p > ~/Documents/stash_diff.txt
   4 less ~/Documents/stash_diff.txt
   5 git stash pop 
   6 git stash clear # clear all stashes
   7 

Update old commit message already pushed

   1 # mark as reword the commit to update
   2 git rebase -i HEAD~2
   3 reword 9b5ca7af9  Old commit
   4 pick 7331d8be5 [prefix] good commit with prefix
   5 # will show new console to add the missing prefix
   6 # [prefix] Old commit
   7 git log 
   8 # replace pick with reword each commit that needs to be changed 
   9 git push origin develop --force

git (last edited 2023-05-26 14:30:32 by 127)