Thursday, June 5, 2014

GIT: common commands

Synch Commands


CLONE (copy) remote REPO to my local directory

git clone ssh://user@subdomain.repositoryhosting.com/company/MyApplication.git


Make sure you are in a correct directory (.git files should be in the that folder) 

pwd


Check that you are working on the correct remote repo

git config --get remote.origin.url


Get update of all remote changes

git fetch


Add all changed LOCAL files to be managed by git

git add --all


Commit all local changes to LOCAL git repo with a message (change the message as needed)

git commit -m "My good explanation of what I am committing here."


Take remote changes at merge them with you local code, your new changes will not be erased

git rebase


Send your local committed changes to remove server

git push

Make sure that you get this message "Your branch is up-to-date with 'origin/XYZ'."

git status


Show differences

$ git diff HEAD FETCH_HEAD

Branch Operations


Switch to an existing branch

$ git checkout develop


Create a new branch named thrift

$ git checkout -b thrift 

Delete an existing branch

$ git branch -D thrift

Resetting - removing local changes


reset hard to previous commit

$ git reset --hard 9a5xxx317





Reset to REMOTE SERVER state, your local changes will be destroyed


$ git reset --hard FETCH_HEAD
$ git clean -f -d
$ git status

On branch master
Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working directory clean

$ git rebase
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.







Working with Submodules


In this tutorial you will see examples of how to work with modules in GTI. It is a good practice for multiple projects to re-use common libraries of code, for example model library, APIs, utility classes, etc.


List Submodules

$ git submodule

Add submodule to an existing project

Before I start, I like to check what is the repository URL of the PARENT project, your submodules will likely have similar URL:

git config --get remote.origin.url

ssh://git@xyz.repositoryhosting.com/xyz/parent_project_name.git

In your (parent) project clone another project as submodule..

git submodule add --force ssh://git@xyz.repositoryhosting.com/xyz/submodule_name.git module/submodule_name
Cloning into 'module/submodule_name'...
remote: Counting objects: 47, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 47 (delta 6), reused 47 (delta 6)
Receiving objects: 100% (47/47), 1.85 MiB | 715.00 KiB/s, done.
Resolving deltas: 100% (6/6), done.
Checking connectivity... done.

If you checked out a base project and your submodule is empty, you need to initialize your submodules. The command below will bring the remote code to your local folders recursively for each submodule you have.

git submodule update -f --init --recursive

If the code you want in the submodule is in different branch then you have to checkout that branch

$ git submodule foreach git checkout branch_name

Finally you can do your normal PULL, or FETCH and REBASE

$ git submodule foreach --recursive git pull


Remove submodule

List currently registered submodules

git submodule

$ git submodule deinit -f module/myOldModule
git rm -rf module/myOldModule
$ rm -rf module/myOldModule