Attend XDA's Second Annual Developer Conference, XDA:DevCon 2014!
5,738,086 Members 54,562 Now Online
XDA Developers Android and Mobile Development Forum

[Guide] How to use Github

Tip us?
 
eagleeyetom
Old
(Last edited by eagleeyetom; 9th September 2012 at 01:23 PM.)
#1  
eagleeyetom's Avatar
Developer Committee / Senior Moderator / XDA Portal Team - OP
Thanks Meter 11254
Posts: 5,940
Join Date: Jan 2011
Location: Somewhere in Poland

 
DONATE TO ME
Default [Guide] How to use Github

Hi.
Today I would like to show you how to use github. I'm not an expert (I'm rather n00b TBH ) but I learned some things and might help you with simple git commands.

1. Github? What's that?

In short it's the web-based hosting service for software development projects that use the Git revision control system. In English - the place where you store your sources.



2. Creating an account.
  • 2.0 Download the required libs
    Code:
    Select Code
    sudo apt-get install git
  • 2.1 Create an account on github.com website
  • 2.2 In terminal type:
    Code:
    Select Code
    git config --global user.name "Your Name Here"
    git config --global user.email "your_email@youremail.com"
    NOTE: use the e-mail used in the website account creation
    2.3 Create your unique SSH public key
    Code:
    Select Code
    ssh-keygen -t rsa -C "your_email@youremail.com"
    # Creates a new ssh key using the provided email
    # Generating public/private rsa key pair.
    # Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
    Now you need to enter a passphrase.
    Code:
    Select Code
    # Enter passphrase (empty for no passphrase): [Type a passphrase]
    # Enter same passphrase again: [Type passphrase again]
    Which should give you something like this:
    Code:
    Select Code
    # Your identification has been saved in /c/Users/you/.ssh/id_rsa.
    # Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
    # The key fingerprint is:
    # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com
    Now go to ~/.ssh folder and copy your id_rsa.pub content into account administration on github.com


    ... and check if everything works

    Code:
    Select Code
    ssh -T git@github.com
    Code:
    Select Code
    The authenticity of host 'github.com (207.97.227.239)' can't be established.
    # RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
    # Are you sure you want to continue connecting (yes/no)?
    Duh?! Sure I want! Yes! Yes! Yessss!

    Code:
    Select Code
    # Hi username! You've successfully authenticated, but GitHub does not
    # provide shell access.

And we are ready to do some serious things!

3. Forking a repo

As an example I'll use https://github.com/CyanogenMod/andro..._apps_Settings
Open this link in the browser and click fork.


  • 3.1 Clone the source from your fork.
    I use my account as an example.

    Code:
    Select Code
    git clone git://github.com/eagleeyetom/android_packages_apps_Settings.git -b gingerbread
    -b gingerbread let us to choose what branch are we going to download


  • 3.2 Do some changes!

    For example add files, remove them etc.
  • 3.3 Commit the changes

    OPTIONAL I created new branch at my project and named it "xda"
    To do this go to the cloned folder and type:
    Code:
    Select Code
    git branch xda
    git checkout xda
    Now it's time to see what's going on:
    Magic command
    Code:
    Select Code
    git status


    As you can see I removed few files and added one.

    Now it's time to tell the git what we want to do.

    4. Pushing the changes

    Add all modified files:
    Code:
    Select Code
    git add .
    Add all removed files
    Code:
    Select Code
    git add -u
    You can also add/rm one file
    Code:
    Select Code
    git add name_of_file
    git rm name_of_file
    After git status we should get something like this:



    Now it's time to commit:

    Code:
    Select Code
    git commit -m 'my first commit'
    And finally to push:

    Code:
    Select Code
    git push
    If you'll get some errors use the following:

    Code:
    Select Code
    git push git@github.com:eagleeyetom/android_packages_apps_Settings.git xda
    I used the name of my github and the name of the branch in the end.



    Woo hoo! Now let's check the website.


That's the most basic basics
In the next posts I will show you some more advanced commands like merge, cherry-pick, removing branches etc.


Credits:
Google
Github Team
All my friends from GingerDX IRC channel

If you find it useful hit thanks button. You can also consider a small donation
The Following 301 Users Say Thank You to eagleeyetom For This Useful Post: [ Click to Expand ]
 
eagleeyetom
Old
(Last edited by eagleeyetom; 9th November 2012 at 10:00 AM.)
#2  
eagleeyetom's Avatar
Developer Committee / Senior Moderator / XDA Portal Team - OP
Thanks Meter 11254
Posts: 5,940
Join Date: Jan 2011
Location: Somewhere in Poland

 
DONATE TO ME
5. Removing branch.
This one took me a lot of googleing and many bad words has been said

I'll make a test branch 'deleteme'

Code:
Select Code
git branch deleteme
git checkout deleteme
git push git@github.com:eagleeyetom/android_packages_apps_Settings.git deleteme
And I have new remote branch now.
But I want to delete it.
Here's the answer.
First:
Check the branches:
Code:
Select Code
git branch -a
And I'll get:
Code:
Select Code
  remotes/origin/HEAD -> origin/gingerbread
  remotes/origin/deleteme
  remotes/origin/donut
  remotes/origin/eclair
  remotes/origin/froyo
  remotes/origin/froyo-stable
  remotes/origin/gb-release-7.2
  remotes/origin/gingerbread
  remotes/origin/gingerbread-release
  remotes/origin/ics
  remotes/origin/icsify
  remotes/origin/wip
  remotes/origin/xda
I want to delete this branch.
Type:
Code:
Select Code
git branch -rd origin/deleteme
# Deleted remote branch origin/deleteme (was 808ffbb).
Code:
Select Code
git push git@github.com:eagleeyetom/android_packages_apps_Settings.git :refs/heads/deleteme
And the remote branch is gone! Yeah!

6. Merging the commits
Imagine the situation that you want to add a commits created by someone else. Let's use our great Recognized Developer nobodyAtall

We need to add the source:
Code:
Select Code
git remote add upstream https://github.com/MiniCM/android_packages_apps_Settings.git
Download the branch:
Code:
Select Code
git fetch upstream
Code:
Select Code
* [new branch]      cm-9.0.0   -> upstream/cm-9.0.0
 * [new branch]      donut      -> upstream/donut
 * [new branch]      eclair     -> upstream/eclair
 * [new branch]      froyo      -> upstream/froyo
 * [new branch]      froyo-stable -> upstream/froyo-stable
 * [new branch]      gb-release-7.2 -> upstream/gb-release-7.2
 * [new branch]      gingerbread -> upstream/gingerbread
 * [new branch]      gingerbread-release -> upstream/gingerbread-release
 * [new branch]      ics        -> upstream/ics
 * [new branch]      jellybean  -> upstream/jellybean
 * [new branch]      master     -> upstream/master
 * [new branch]      wip        -> upstream/wip

You'll get a message to resolve the conflicts. In short and most n00b friendly way is to open pointed files and delete the:
<<<<<<<<
=======
>>>>>>>>
symbols.

Don't forget to test make before pushing!

Now standard procedure:
Code:
Select Code
git add .
git commit -m 'test merge'
git push git@github.com:eagleeyetom/android_packages_apps_Settings.git xda
7. Cherry-pick the single commit
Now it's time to add specific commit to our build. I'm going to use this one.
Code:
Select Code
git remote add upstream https://github.com/MiniCM/android_packages_apps_Settings.git
git fetch upstream
git cherry-pick c95854e8c91ec279bd3719c637f531491855278a
And we're good
Now commit should be added. All you need now is to push - no need to commit

8. Changing the branch
While using git you may noticed that sometimes after fresh sync there is no branch selected. Imagine the situation when you are on a branch A and want to check to branch B, because it uses a different method (like framework patch etc.)
The solution is pretty simple.
Code:
Select Code
git checkout -t remote_name/remote_branch
It allows you to change the branch to remote one without cloning the whole repo again.
The Following 129 Users Say Thank You to eagleeyetom For This Useful Post: [ Click to Expand ]
 
eagleeyetom
Old
(Last edited by eagleeyetom; 24th October 2012 at 02:56 PM.)
#3  
eagleeyetom's Avatar
Developer Committee / Senior Moderator / XDA Portal Team - OP
Thanks Meter 11254
Posts: 5,940
Join Date: Jan 2011
Location: Somewhere in Poland

 
DONATE TO ME
Pull request

If you feel that you have fixed a problem and want to help the developer to make his own ROM/kernel etc. you should consider to make a pull request. Pull request adds the changes you have made to the others repo.

First of all.
Fork and clone destined repo.
Check the previous post about forking and cloning.
Now make some changes and upload it to your own remote git.

Then, go to your forked repo using browser and click on Pull request.



Then choose the account and branch to pull-request.



Click and wait for your request to be merged

Merging a pull request.
Sometimes someone wants to add something to your code.
You'll be notified by e-mail and also see the notification on your github website.

Go there and click Open



When the changes can't be merged you'll see such message:



But when it's green, you are ready to merge it



Don't forget to review the code. In other way you'll be forced to delete the commit.

You can also use text method:

Code:
Select Code
git checkout master
# Check out your master branch
git remote add TeamFun git://github.com/TeamFun/android_packages_apps_Settings.git
# Add a new remote named 'TeamFun'
git fetch TeamFun
# Pull in all the commits from the 'cameronmcefee' remote
git merge TeamFun/gingerbread
# Merge your master branch into the 'gingerbread' branch from the 'TeamFun' remote
git push git@github.com:eagleeyetom/android_packages_apps_Settings.git master
# Push your newly-merged branch back to GitHub
or

Code:
Select Code
git checkout master
# Check out your master branch
$ curl http://github.com/octocat/Spoon-Knife/pull/25.patch | git am
# Grab the patch generated by a pull request and feed it into a new commit
$ git push git@github.com:eagleeyetom/android_packages_apps_Settings.git master
# Push your newly-updated commit back to GitHub
TIPS AND TRICKS

REVERT CHANGES

To discard all unstaged changes e.g. failed merge etc. type:
Code:
Select Code
git checkout .
# to delete all changes

git checkout path/to/file

# to discard changes for a specific file
You can also use:
Code:
Select Code
rm -rf ./ 

# deletes all of the files in the directory

git reset --hard

#This is going to restore the git to the previous state
HOW TO REMOVE COMMITTED CHANGES?

To remove committed changes you have to revert the commit. But how to do that? It's your answer

Code:
Select Code
git reset HEAD --hard
HEAD is the previous commit. To revert to previous state use HEAD~1, HEAD~2 etc. you can also use the code taken from git log.

GIT PATCH AND GIT APPLY

Now I want to make a patch file to e.g. send an e-mail with my commited changes.

First I need to find a changes made by a commit. To do this I need to know commit ID.
Code:
Select Code
git log --oneline #This would show the commit ID's
Now pick the commit for example 22a95d1 and use git show to make a patch

Code:
Select Code
git show 22a95d1 > patchname.patch
And I got patch, but how to apply it?
The answer is easy. Use git apply.

Code:
Select Code
git apply patchname.patch
# --check checks if the patch can be applied
FORCE PUSH
Sometimes github doesn't want to cooperate - just like some people
You can force it by adding --force or -f
Code:
Select Code
git push -f git@github.com:eagleeyetom/android_packages_apps_Settings.git master
n00b method to add changes after failed push.
Clone the repo and delete everything but .git directory. Then copy modified content, commit and push :P
The Following 103 Users Say Thank You to eagleeyetom For This Useful Post: [ Click to Expand ]
 
AChep
Old
#4  
AChep's Avatar
Recognized Themer / Recognized Developer
Thanks Meter 5530
Posts: 1,266
Join Date: Feb 2011
Location: Ukraine, Lugansk, Belovodsk

 
DONATE TO ME
guide-man funs! :P

Artem Chepurnoy. My index thread here
Check out AcDisplay, Donate to me via Bitcoin
 
Chris95X8
Old
#5  
Chris95X8's Avatar
Recognized Contributor
Thanks Meter 2286
Posts: 2,773
Join Date: Mar 2011
Oh I needed this. Thanks EET!
The Following User Says Thank You to Chris95X8 For This Useful Post: [ Click to Expand ]
 
RohinZaraki
Old
#6  
RohinZaraki's Avatar
Recognized Contributor
Thanks Meter 3727
Posts: 7,036
Join Date: Sep 2011
Location: Batu Pahat, Johor

 
DONATE TO ME
Thanks man really needed this !
My Devices and What They're Running
Sony Ericsson Xperia X8 │White│Unlocked Bootloader│GingerDX - 2.3.7COLD STORAGE
HTC One X │Black│Unlocked Bootloader│CyanogenMod 11 M5 - 4.4.2
Asus Nexus 7│Black│Unlocked Bootloader│Dual Booting Stock AOSP Goodness - 4.4.2 INCAPACITATED

 
lucastan96
Old
#7  
lucastan96's Avatar
Senior Member
Thanks Meter 2094
Posts: 2,865
Join Date: Dec 2011
Location: Malacca
Wow... this is also exactly what I would want! Thanks EET!

SEARCH. ASK. TEST... not the other way round! - lucastan96

Sent With My Brains To Yours
 
cascabel
Old
#8  
cascabel's Avatar
Senior Member
Thanks Meter 730
Posts: 5,300
Join Date: May 2012
Location: a city in a galaxy far far away
Great. Now i'll know what i'm doing wrong. :thumbup:

Please give credit where credit is due..
If you can't even search how can I help you??
 
AndroXperia
Old
(Last edited by AndroXperia; 9th September 2012 at 08:03 AM.)
#10  
AndroXperia's Avatar
Junior Member
Thanks Meter 1
Posts: 3
Join Date: Sep 2012
Location: Selangor
Wow... this is what i exactly learning too ! Thanks mate...

my current stage
repo branching and remote branching
im using merging conflict Kdiff3(downloaded from website)
  1. Add the KDiff3 directory to your Windows System Path (e.g. C:\Program Files\KDiff3\)
  2. Add kdiff3 as your Git mergetool (From Git Bash, run git config --global merge.tool kdiff3)
  3. Add kdiff3 complete path to Git Config
    (From Git Bash, run git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe")
  4. Go into Git GUI settings and set the mergetool to kdiff3 (if Git GUI doesn't pick up this setting from git config, which it should)

git config --global diff.tool KDiff3

git config --global difftool.KDiff3.path "C:/Program Files/KDiff3/kdiff3.exe"

git config --global merge.tool KDiff3

git config --global mergetool.KDiff3.path "C:/Program Files/KDiff3/kdiff3.exe"


then type,

git mergetool

it will auto bring to your Kdiff3

The Following User Says Thank You to AndroXperia For This Useful Post: [ Click to Expand ]
Tags
git, github, guide, pull request
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes