Note: Mulitple github account on Linux with ssh

1. Generation account key-pair by ssh-keygen
$ssh-keygen -t rsa -b 4096 -C "test1@test.com" -f test1
$ssh-keygen -t rsa -b 4096 -C "test2@test.com" -f test2
Will got test1/test1.pub and test2/test2.pub, total 4 files for two key-pair

test1.pub & test2.pub are public key for repositories setting on github.com
test1 & test2 are your private key, copy into~/.ssh/ folder
and run ssh-add ~/.ssh/test1 and ssh-add ~/.ssh/test2

2. create configfile under ~/.ssh
vim ~/.ssh/config, then add the below
Host github-test1
HostName github.com
User git
IdentityFile /home/your_account/.ssh/test1

Host github-test2
HostName github.com
User git
IdentityFile /home/your_account/.ssh/test2

3. git clone your repositories
git clone git@github.com:test1/test1.git
git clone git@github.com:test2/test2.git

then to change url of repository under work folder
git remote set-url origin git@github-test1:test1/test1.git
and
git remote set-url origin git@github-test2:test2/test2.git

below my backup settings
github_m

廣告

Note: usage repo tips

“repo sync -c –no-tags –no-clone-bundle -jN" to save your time
這就只會拉你要的那個 (repo init -u URI -b branch)branch or tags
N: integer for parallel process
repo init 時加上 –reference local_path 可以把使用自己已經先 mirror repositories
這是透過git clone 的 –reference 作到的
做出一個 local mirror
搭配適當的指令可以快速repo sync

repo manifest -r -o snapshot.xml
用來產生當下 repo 的snapshot, 用途主要是當需要release 然後想保存當下所有 repositories  的版本, 可以用來回溯版本除錯

Note: Added private repository into manifest.xml

簡單講 github/bitbucket 之流都有提供 private repository 的代管,因為目前使用Yocto Project 是透過Google 的 repo 做build environments 建制,因為包含一些自我的private repositories 在bitbucket 上。

透過 bitbucket 的解說,是採取 ssh://git@bitbucket.org/<name>/<repository>.git 的格式
記住 name 可是屬於個人的user name 也可以是 team name
可以看 bitbucket 提供的 git@bitbucket.org:<name>/<repository>.git 的格式辨認出來
我自己放到 manifest.xml 是採取下列格式

<remote name="bitbucket" fetch="ssh://git@bitbucket.org/<name> />

<project remote="bitbucket" revision="refs/master/head" name="<repository>.git" path="sources/<repository>" />

Note: To clone special branch for Git operation

起因是最近有個新案子在跑 用的是Yocto/OE 的Build environments 他有一個設計就是針對某的vendors 的BSP 可以將patch 透過寫script 方式在Buildtime時一個一個打上去, 也可以自己透過SCM tools 去拉特定的 revision,一般的建議是用patch 一個一個打,可是我覺的這樣很蠢呀! 尤其是kernel 明明廠商就是有git repo. 可以拉了,當然因為你沒辦法推回去 但是只要自己clone一份就好。

但是事情沒有我這個笨人想的那樣簡單,因為目前是多方合作的案子,所以由客戶方在Bitbucket 上開了一個 team group 共同協作,當我好不容易把kernel repo 搬到bitbucket 上時,竟然發現Bitbucket 出現該repo. 超過2GB 所以只能讀不能寫的訊息,按照線上說明去做了一些步驟如透過BFG去過濾大於某一個大小的檔案等方法,但是都一無所獲。不由得想到前幾天看到的一個方法

  1. git init #initialized a empty repository
  2. git remote add -t <branch> <name> <url>     # track a special branch
    or git remote add -m <brancn> <name> <url> # track a special branch to master
  3. git checkout

經過測試後該 repo 果然可以有效降為只剩下 1GB 大小 雖然 Bitbucket 還是會警告 但是最少還是可以 commit 到 2GB 的狀況, 我個人是覺的應該不會出現被我commit到出現 repository 增長到 2GB 的慘事才是

update: 剛不知道為啥 又不成功 但是在 git官網看到 doc 有寫 下面這段

Imitate git clone but track only selected branches

$ mkdir project.git
$ cd project.git
$ git init
$ git remote add -f -t master -m master origin git://example.com/git.git/
$ git merge origin

		

WorkNote: git-daemon-run & add remote repository to fetch

Host A, IP:192.168.10.4 ( fetch remote repository )
Host B, IP:192.168.10.5 ( remote repository, have a branch “uPad" )

First on Host B install git-daemon-run service (on Ubuntu/Debian) and follow the below steps.

read /usr/share/doc/git-daemon-run/README.Debian document, the article describe how do to setup a git daemon on your computer.

1. sudo ln -s ~/kernel/android-3.0/.git /var/cache/git/android-3.0.git  # create a syminks for git-daemon-run
2. touch ~/kernel/android-3.0/.git/git-daemon-export-ok  # create a tag file for git-daemon-run
3. su sv restart git-deamon  # restart git-deamon-run service

On Host A fetch the git repository step

5. git remote add MyRepo git://192.168.10.5/git/android-3.0.git
6. git fetch MyRepo uPad:uPad

Results:

remote: Counting objects: 15, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 7), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
From git://192.168.10.5/git/android-3.0
* [new branch] uPad -> uPad

Note: git cherry-pick, blame, and log window

git cherry-pick [-n]

用來merge 某個branch 內的commit, 或是透過 –n 選項可以分次選擇commit 先進到stash area 然後一次merge, the below picture show how to pick up 2 commits to merge into current work branch

image

git blame

用來看單檔內, 每一行是誰修改commit的, 下圖來自 TortoiseGitBlame (Built in TortoiseGit 1.6.3.0)

image

Log window

Create a new branch(BetaTest) then merge something to verify an idea in below picture

image