[GUIDE]Git tuts drive me nuts -a Roofer's guide to GIT

Search This thread

jamieg71

Senior Member
Mar 13, 2011
3,102
7,627
Sanford, Florida
For all the things you can do in Android
somewhere someone has made a great definitive guide
that will help to both guide you
and provide a basic understanding of the steps involved
assuring you of success in your android tweaking endeavour.
This is not one of those guides.
I'm going to do my best to articulate my
dysfunctional
and admitted retardation
of an understanding of git.
I'll provide some links to guides I have found
so you can check them out and hopefully get a better grasp than I.
When you do, post your tips and tricks here..
I will add links to any posts with tips tricks or guides so you get your proper credit.
(if your into that sorta thing)


This guide is in no particular order and
is subject to random mistakes and inaccuracies.
I will be putting all git commands in red
If it's in red you can assume you just type that and hit enter.


What is Git?
Git is a tool used to manage projects housed on github and/or locally on your machine. For a greater understanding and comprehensive guide try gitready.com



Cloning

The simplest of things to do with git. Same steps to clone any repository be it your own or one from another github.

git clone <URL of your repository on github> -b <branch> (name of repo)

Example:
Code:
[COLOR="Red"]git clone git@github.com:jamieg71/kernel.git -b master msm8960
[/COLOR]
This tells it what to clone, denotes the branch with -b in this case branch
name is 'master' and finally (name of repo) tells git what you wish for your
cloned repository to be named in this case 'msm8960'.

Making commits & Pushing

Let's say you want to make a couple changes to an app and then push those changes back to github,
we'll use ROMControl for an example.

Navigate to root of ROMControl directory.


First do
repo start ska43 .
Here use the name of the branch you are on, for SofaKingAndroid 4.3 it's "ska43",
also include the dot [space dot] "." at the end of the command.
If instead of working within the rom source in /packages/apps/ you
instead had cloned ROMControl to it's own seperate folder, this is not necessary.

Some helpful commands-
gitk a helpful GUI for git

git status
This will give you an update of what branch you are on and what if any changes have been made.

git log
Will give you a commit history with change ID's commit messages authors time stamps etc,
it can be very handy when looking for specific commits to cherry-pick or revert. This should
show the complete history of a given project with all contributions along the way. To exit this
quickly hit the "q" key.

git reflog
This will give you a short history of your local cloned repository listing each seperate head

Once you've made your changes, (and built to be sure everything works as planned....)

git status Just for a reference of what you've done, it will also show any files with a "~" in case your like me and occasionally screw up

To stage changes before committing you have multiple options-

git add .
This will add ALL changed files, sometimes it's handy but if you have done several unrelated
things it can be nice to have them in separate commits with their own commit messages and ID's

git add -a
Same as above

git add (directory/name of file) Example: git add src/com/aokp/romcontrol/AOKPActivity.java
The easiest way to do this, for me, is to just c/p the names of modified files
from the list after running git status

Now to commit-

git commit -m 'your message here' Put a brief description of what your commit involves

To Push-

git push <URL of your repository on github>
Example:
Code:
 [COLOR="Red"]git push git@github.com:SofaKingAndroid/packages_apps_ROMControl.git[/COLOR]

Fetching Upstream Changes

What if you had forked a project and been working on it for awhile, and you notice there where changes to the original source. Now you need to pull in upstream changes. To do this let's clone our fork to it's own folder on our machine-

We will assume you work in ~/android/ and know how to mkdir upstrm4krnl && cd upstrm4krnl

git clone <URL of your repository on github> -b <branch> (name of repo)
Example:
Code:
 [COLOR="Red"]git clone git@github.com:jamieg71/kernel.git -b master msm8960[/COLOR]
This tells it what to clone, denotes the branch with -b in this case branch
name is 'master' and finally (name of repo) tells git what you wish for your
cloned repository to be named in this case 'msm8960'.

To add a remote repository to fetch upstream changes, (where you forked from)

git remote add upstream <URL of remote repository>
Example:
Code:
[COLOR="Red"]git remote add upstream git@github.com:CyanogenMod/android_kernel_htc_msm8960.git[/COLOR]  
                                                                                  
[COLOR="Red"]git fetch upstream [/COLOR]                                                                             
This will add the log and pre stage all the changes on the remote repository.
After doing this Be aware of what your intentions are. If there have only been
minor changes with low likelyhood of major conflicts go ahead with merge.
Otherwise it may be best to cherry-pick specific changes.
 
To add these changes to your working files you have some options, I'm positive these are not the extent of those options but perhaps someone with better know-how will chime in....
[quote]
[COLOR="Red"]git merge upstream/master[/COLOR]                                                                 
This merges all commits from both the upstream repository and any commits
you made to your forked repo.
 
[COLOR="Red"]git pull upstream/master[/COLOR]                                                                     
 This will pull in changes only from the remote repository[/quote]
 
For a better explanation see [url="http://eagain.net/articles/git-for-computer-scientists/#history"]Git for Computer Scientists[/url]
 
Now do-

[COLOR="Red"]git checkout master[/COLOR]                                                                            
This should return you to your working branch

of course do a [COLOR="Red"]git status[/COLOR]

 

Finally do-

[COLOR="Red"]git add .[/COLOR]

[COLOR="Red"]git commit -m 'commit message'[/COLOR]

[COLOR="Red"]git push[/COLOR]                                                                                          
 From cloned repo a simple git push should suffice. If not go ahead
and do git push <URL of your forked repo>
 Example: [code][COLOR="Red"]git push git@github.com:jamieg71/kernel.git[/COLOR]

Cherry-picking

What is cherry-picking? Simple answer- grabbing commits from a different repo and adding to your own.

Here's some links-

Cherry-Pick-Manual from Kernel.org it don't 'git' more comprehensive than that.

Gitready Guide Greate guide for beginners to experts

I never really got it until I found this on Pastebin. Unknown author or I'd give em creds in all my threads.

And another here it has a different take at the begining

A multitude of guides can be found on Google, I have found the majority take for granted there is a roofer trying to follow them and don't necessarily explain some of the simple things. Which is always what screws me up..

Here's what works for me. I'm going to c/p a session from terminal and will highlight the actual git commands in red and add notes in green (0)
Code:
jamie@KANGBOT-1:~/android/sofa/frameworks$ [COLOR="Red"]git clone git@github.com:SofaKingAndroid/frameworks_base.git -b ska43 base[/COLOR]
Cloning into 'base'...
remote: Counting objects: 796444, done.
remote: Compressing objects: 100% (192783/192783), done.
remote: Total 796444 (delta 525643), reused 795809 (delta 525149)
Receiving objects: 100% (796444/796444), 1.06 GiB | 6.67 MiB/s, done.
Resolving deltas: 100% (525643/525643), done.
Checking out files: 100% (21192/21192), done.
jamie@KANGBOT-1:~/android/sofa/frameworks$ cd base

jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git status[/COLOR]
# On branch ska43
nothing to commit, working directory clean
jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git remote add ok git@github.com:AOKP/frameworks_base.git[/COLOR]    [COLOR="SeaGreen"](1)[/COLOR]
jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git fetch ok[/COLOR] 
remote: Counting objects: 40, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 23 (delta 14), reused 12 (delta 3)
Unpacking objects: 100% (23/23), done.
From github.com:AOKP/frameworks_base
 * [new branch]      jb         -> ok/jb
 * [new branch]      jb-broke   -> ok/jb-broke
 * [new branch]      jb-mr1     -> ok/jb-mr1
 * [new branch]      jb-mr2     -> ok/jb-mr2
jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git cherry-pick 4829174d6f6fa33cd51f2bde9df2e100420ef3bf[/COLOR]  [COLOR="SeaGreen"](2)[/COLOR]
[ska43 f8380a3] SystemUI: 4G/LTE icon toggle
 Author: Roman Birg <romanbirg@gmail.com>
 2 files changed, 17 insertions(+), 2 deletions(-)

jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git status[/COLOR]
# On branch ska43
# Your branch is ahead of 'origin/ska43' by 1 commit.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean

jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git remote add upstream git@github.com:SofaKingAndroid/frameworks_base.git[/COLOR]  [COLOR="SeaGreen"](3)[/COLOR]
jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git push[/COLOR]
Counting objects: 31, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (16/16), 1.61 KiB, done.
Total 16 (delta 10), reused 0 (delta 0)
To git@github.com:SofaKingAndroid/frameworks_base.git
   05ade0e..f8380a3  ska43 -> ska43

Notes

1) git remote add (initials) <URL of repository to grab commits>
The initials are what you make em, I used "ok"

2) git cherry-pick <Change ID or SHA of commit you want>
To find the change ID refer to commit history for
the project you are working on after fetch
you may be able to do git log and find the
change ID you want.

3) git remote add upstream <URL of your github repository>
Pretty sure I could have done git checkout ska43 and
it would have returned me to my working files, but I
wasn't sure so I did it this way.

This is an example of a very simple cherry-pick with no conflicting code. Most times when cherry-picking there will be many conflicts. You can use gitk (a GUI for git) to help resolve conflicts and get ready to merge.

More to come.
If you see a mistake or have anything to add
please by all means
respond in this thread.
More to come-​
 

percy_g2

Senior Member
Oct 22, 2012
4,475
15,970
Bangalore
sites.google.com
forking in another way :)

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

example :-

I want to fork https://github.com/omnirom/android_frameworks_av android-4.4 branch into https://github.com/Legacy-Xperia/android_frameworks_av xyz branch

make a directory as you wish in your PC/COMP

git init
git pull https://github.com/Legacy-Xperia/android_frameworks_av.git
git remote add fork https://github.com/omnirom/android_frameworks_av
git fetch fork
git checkout -b xyz fork/android-4.4


done then push it :)


PS:- You can directly fork using browser but i love working via terminal
 
G

GuestK0029

Guest
(y)

Sent from my EMVIRUS Sensation XL ! using XDA Premium 4 mobile app
 

jamieg71

Senior Member
Mar 13, 2011
3,102
7,627
Sanford, Florida
forking in another way :)

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

example :-

I want to fork https://github.com/omnirom/android_frameworks_av android-4.4 branch into https://github.com/Legacy-Xperia/android_frameworks_av xyz branch

make a directory as you wish in your PC/COMP

git init
git pull https://github.com/Legacy-Xperia/android_frameworks_av.git
git remote add fork https://github.com/omnirom/android_frameworks_av
git fetch fork
git checkout -b xyz fork/android-4.4


done then push it :)


PS:- You can directly fork using browser but i love working via terminal

Nice, thanks for the alternate means.




You can also add gitg in OP, it's a great software for working with git.


I've been inactive for some time now dang life gets in the way of me hobby. Next time I'm in the PC I'll add this as well as Percy_g2 method. Thanks for the input.




excellent guide jamie
great job as always :beer:

Hey hey, I see you doing some great stuff over in the G2 forum. Great stuff buddy!

Sent from my EVO using Tapatalk
 
  • Like
Reactions: youdug and percy_g2

Top Liked Posts

  • There are no posts matching your filters.
  • 36
    For all the things you can do in Android
    somewhere someone has made a great definitive guide
    that will help to both guide you
    and provide a basic understanding of the steps involved
    assuring you of success in your android tweaking endeavour.
    This is not one of those guides.
    I'm going to do my best to articulate my
    dysfunctional
    and admitted retardation
    of an understanding of git.
    I'll provide some links to guides I have found
    so you can check them out and hopefully get a better grasp than I.
    When you do, post your tips and tricks here..
    I will add links to any posts with tips tricks or guides so you get your proper credit.
    (if your into that sorta thing)


    This guide is in no particular order and
    is subject to random mistakes and inaccuracies.
    I will be putting all git commands in red
    If it's in red you can assume you just type that and hit enter.


    What is Git?
    Git is a tool used to manage projects housed on github and/or locally on your machine. For a greater understanding and comprehensive guide try gitready.com



    Cloning

    The simplest of things to do with git. Same steps to clone any repository be it your own or one from another github.

    git clone <URL of your repository on github> -b <branch> (name of repo)

    Example:
    Code:
    [COLOR="Red"]git clone git@github.com:jamieg71/kernel.git -b master msm8960
    [/COLOR]
    This tells it what to clone, denotes the branch with -b in this case branch
    name is 'master' and finally (name of repo) tells git what you wish for your
    cloned repository to be named in this case 'msm8960'.

    Making commits & Pushing

    Let's say you want to make a couple changes to an app and then push those changes back to github,
    we'll use ROMControl for an example.

    Navigate to root of ROMControl directory.


    First do
    repo start ska43 .
    Here use the name of the branch you are on, for SofaKingAndroid 4.3 it's "ska43",
    also include the dot [space dot] "." at the end of the command.
    If instead of working within the rom source in /packages/apps/ you
    instead had cloned ROMControl to it's own seperate folder, this is not necessary.

    Some helpful commands-
    gitk a helpful GUI for git

    git status
    This will give you an update of what branch you are on and what if any changes have been made.

    git log
    Will give you a commit history with change ID's commit messages authors time stamps etc,
    it can be very handy when looking for specific commits to cherry-pick or revert. This should
    show the complete history of a given project with all contributions along the way. To exit this
    quickly hit the "q" key.

    git reflog
    This will give you a short history of your local cloned repository listing each seperate head

    Once you've made your changes, (and built to be sure everything works as planned....)

    git status Just for a reference of what you've done, it will also show any files with a "~" in case your like me and occasionally screw up

    To stage changes before committing you have multiple options-

    git add .
    This will add ALL changed files, sometimes it's handy but if you have done several unrelated
    things it can be nice to have them in separate commits with their own commit messages and ID's

    git add -a
    Same as above

    git add (directory/name of file) Example: git add src/com/aokp/romcontrol/AOKPActivity.java
    The easiest way to do this, for me, is to just c/p the names of modified files
    from the list after running git status

    Now to commit-

    git commit -m 'your message here' Put a brief description of what your commit involves

    To Push-

    git push <URL of your repository on github>
    Example:
    Code:
     [COLOR="Red"]git push git@github.com:SofaKingAndroid/packages_apps_ROMControl.git[/COLOR]

    Fetching Upstream Changes

    What if you had forked a project and been working on it for awhile, and you notice there where changes to the original source. Now you need to pull in upstream changes. To do this let's clone our fork to it's own folder on our machine-

    We will assume you work in ~/android/ and know how to mkdir upstrm4krnl && cd upstrm4krnl

    git clone <URL of your repository on github> -b <branch> (name of repo)
    Example:
    Code:
     [COLOR="Red"]git clone git@github.com:jamieg71/kernel.git -b master msm8960[/COLOR]
    This tells it what to clone, denotes the branch with -b in this case branch
    name is 'master' and finally (name of repo) tells git what you wish for your
    cloned repository to be named in this case 'msm8960'.

    To add a remote repository to fetch upstream changes, (where you forked from)

    git remote add upstream <URL of remote repository>
    Example:
    Code:
    [COLOR="Red"]git remote add upstream git@github.com:CyanogenMod/android_kernel_htc_msm8960.git[/COLOR]  
                                                                                      
    [COLOR="Red"]git fetch upstream [/COLOR]                                                                             
    This will add the log and pre stage all the changes on the remote repository.
    After doing this Be aware of what your intentions are. If there have only been
    minor changes with low likelyhood of major conflicts go ahead with merge.
    Otherwise it may be best to cherry-pick specific changes.
     
    To add these changes to your working files you have some options, I'm positive these are not the extent of those options but perhaps someone with better know-how will chime in....
    [quote]
    [COLOR="Red"]git merge upstream/master[/COLOR]                                                                 
    This merges all commits from both the upstream repository and any commits
    you made to your forked repo.
     
    [COLOR="Red"]git pull upstream/master[/COLOR]                                                                     
     This will pull in changes only from the remote repository[/quote]
     
    For a better explanation see [url="http://eagain.net/articles/git-for-computer-scientists/#history"]Git for Computer Scientists[/url]
     
    Now do-
    
    [COLOR="Red"]git checkout master[/COLOR]                                                                            
    This should return you to your working branch
    
    of course do a [COLOR="Red"]git status[/COLOR]
    
     
    
    Finally do-
    
    [COLOR="Red"]git add .[/COLOR]
    
    [COLOR="Red"]git commit -m 'commit message'[/COLOR]
    
    [COLOR="Red"]git push[/COLOR]                                                                                          
     From cloned repo a simple git push should suffice. If not go ahead
    and do git push <URL of your forked repo>
     Example: [code][COLOR="Red"]git push git@github.com:jamieg71/kernel.git[/COLOR]

    Cherry-picking

    What is cherry-picking? Simple answer- grabbing commits from a different repo and adding to your own.

    Here's some links-

    Cherry-Pick-Manual from Kernel.org it don't 'git' more comprehensive than that.

    Gitready Guide Greate guide for beginners to experts

    I never really got it until I found this on Pastebin. Unknown author or I'd give em creds in all my threads.

    And another here it has a different take at the begining

    A multitude of guides can be found on Google, I have found the majority take for granted there is a roofer trying to follow them and don't necessarily explain some of the simple things. Which is always what screws me up..

    Here's what works for me. I'm going to c/p a session from terminal and will highlight the actual git commands in red and add notes in green (0)
    Code:
    jamie@KANGBOT-1:~/android/sofa/frameworks$ [COLOR="Red"]git clone git@github.com:SofaKingAndroid/frameworks_base.git -b ska43 base[/COLOR]
    Cloning into 'base'...
    remote: Counting objects: 796444, done.
    remote: Compressing objects: 100% (192783/192783), done.
    remote: Total 796444 (delta 525643), reused 795809 (delta 525149)
    Receiving objects: 100% (796444/796444), 1.06 GiB | 6.67 MiB/s, done.
    Resolving deltas: 100% (525643/525643), done.
    Checking out files: 100% (21192/21192), done.
    jamie@KANGBOT-1:~/android/sofa/frameworks$ cd base
    
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git status[/COLOR]
    # On branch ska43
    nothing to commit, working directory clean
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git remote add ok git@github.com:AOKP/frameworks_base.git[/COLOR]    [COLOR="SeaGreen"](1)[/COLOR]
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git fetch ok[/COLOR] 
    remote: Counting objects: 40, done.
    remote: Compressing objects: 100% (17/17), done.
    remote: Total 23 (delta 14), reused 12 (delta 3)
    Unpacking objects: 100% (23/23), done.
    From github.com:AOKP/frameworks_base
     * [new branch]      jb         -> ok/jb
     * [new branch]      jb-broke   -> ok/jb-broke
     * [new branch]      jb-mr1     -> ok/jb-mr1
     * [new branch]      jb-mr2     -> ok/jb-mr2
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git cherry-pick 4829174d6f6fa33cd51f2bde9df2e100420ef3bf[/COLOR]  [COLOR="SeaGreen"](2)[/COLOR]
    [ska43 f8380a3] SystemUI: 4G/LTE icon toggle
     Author: Roman Birg <romanbirg@gmail.com>
     2 files changed, 17 insertions(+), 2 deletions(-)
    
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git status[/COLOR]
    # On branch ska43
    # Your branch is ahead of 'origin/ska43' by 1 commit.
    #   (use "git push" to publish your local commits)
    #
    nothing to commit, working directory clean
    
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git remote add upstream git@github.com:SofaKingAndroid/frameworks_base.git[/COLOR]  [COLOR="SeaGreen"](3)[/COLOR]
    jamie@KANGBOT-1:~/android/sofa/frameworks/base$ [COLOR="Red"]git push[/COLOR]
    Counting objects: 31, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (13/13), done.
    Writing objects: 100% (16/16), 1.61 KiB, done.
    Total 16 (delta 10), reused 0 (delta 0)
    To git@github.com:SofaKingAndroid/frameworks_base.git
       05ade0e..f8380a3  ska43 -> ska43

    Notes

    1) git remote add (initials) <URL of repository to grab commits>
    The initials are what you make em, I used "ok"

    2) git cherry-pick <Change ID or SHA of commit you want>
    To find the change ID refer to commit history for
    the project you are working on after fetch
    you may be able to do git log and find the
    change ID you want.

    3) git remote add upstream <URL of your github repository>
    Pretty sure I could have done git checkout ska43 and
    it would have returned me to my working files, but I
    wasn't sure so I did it this way.

    This is an example of a very simple cherry-pick with no conflicting code. Most times when cherry-picking there will be many conflicts. You can use gitk (a GUI for git) to help resolve conflicts and get ready to merge.

    More to come.
    If you see a mistake or have anything to add
    please by all means
    respond in this thread.
    More to come-​
    3
    http://www.youtube.com/watch?v=ZDR433b0HJY

    Interesting talk about how git works(rebase,merge,pull,push,status etc) and more info :)
    2
    forking in another way :)

    git remote add fork <url of fork>
    git fetch fork
    git checkout -b fork_branch fork/<branch>

    example :-

    I want to fork https://github.com/omnirom/android_frameworks_av android-4.4 branch into https://github.com/Legacy-Xperia/android_frameworks_av xyz branch

    make a directory as you wish in your PC/COMP

    git init
    git pull https://github.com/Legacy-Xperia/android_frameworks_av.git
    git remote add fork https://github.com/omnirom/android_frameworks_av
    git fetch fork
    git checkout -b xyz fork/android-4.4


    done then push it :)


    PS:- You can directly fork using browser but i love working via terminal

    Nice, thanks for the alternate means.




    You can also add gitg in OP, it's a great software for working with git.


    I've been inactive for some time now dang life gets in the way of me hobby. Next time I'm in the PC I'll add this as well as Percy_g2 method. Thanks for the input.




    excellent guide jamie
    great job as always :beer:

    Hey hey, I see you doing some great stuff over in the G2 forum. Great stuff buddy!

    Sent from my EVO using Tapatalk
    2
    forking in another way :)

    git remote add fork <url of fork>
    git fetch fork
    git checkout -b fork_branch fork/<branch>

    example :-

    I want to fork https://github.com/omnirom/android_frameworks_av android-4.4 branch into https://github.com/Legacy-Xperia/android_frameworks_av xyz branch

    make a directory as you wish in your PC/COMP

    git init
    git pull https://github.com/Legacy-Xperia/android_frameworks_av.git
    git remote add fork https://github.com/omnirom/android_frameworks_av
    git fetch fork
    git checkout -b xyz fork/android-4.4


    done then push it :)


    PS:- You can directly fork using browser but i love working via terminal