|Tools| Git v.s Repo

一般跟別人合作開發都是使用 git。那 repo 是什麼?
repo 是 Google 開發出來的工具,用來管理 Android 的。
這篇文章會列出常用的指令。


一份 Android code 是由許多 project 組成的,每個 project 就是一個 git project。
repo 這個工具,就是可以管理 branches 以及眾多的 git project!

> repo init 後,可以找到 .repo/manifest.xml 這會記錄你控制的 projects

*基本工作流程與對照:

repo git
repo init -u URL -m ooxx.xml -b remote_branchgit clone URL
repo sync -cgit pull URL remote_branch:local_branch
repo start branch_name –allgit branch branch_name
git statusgit status
git addgit add
git commitgit commit
repo upload .git push


*git 好用指令:
 > 新增一個 local branch
 git branch {name}
 > 切換 branch 到 另一個 branch’
 git checkout {branch’}
 > 刪除特定 local branch
 git branch -d {name}
 > 查詢遠端的server 位置及名字
 git remote -v
 > 新增一個遠短 server
 git remote add {given_name} URL
 > 強迫 reset
 git reset –hard {local_sha}
 > 把 commit 推到遠端 branch
 git push {given_name} {local_branch}: refs/for/{remote_branch}
 > 從遠端 branch 拉 code 下來
 git pull {given_name} {remote_branch}:{local_branch}
 > 當前一個修改已 commit,又想把這次修改跟上一個修改一起 commit
 git commit –amend
 > 想上 patch 到某個已經 push 出去的 change
 git push {given_name} {local_branch}:refs/changes/{change_id}
 > 查詢某行的歷史
 git blame -L [行數] [檔案名]
 > 撿別 branch 的 commit 到目前的 branch
 git cherry-pick [sha-1]

*好用的配置
 > git commit 的模板:
  新增一個  ~/.git-template
  然後 git config commit.template ~/.git-template

 > 設置reviewers, git push rest,就會自動帶上 reviewers
  到 .git/config 編輯
  [remote “test”]
  pushurl = ssh://account@server_address:port/project_name
  push = {local_branch}:refs/for/{remote_branch}%r=someone1@mail, r=someone2@mail

*製作 patch,打 patch
 (在 branch A)
 git log
 git format-patch -1 [sha-1]
 mv ooxx.patch ~/
 (換到 branch B)
 git am [~/ooxx.patch]

*合併 commits / 分支
 git rebase -i {要固定住的那個 git log}
 [modify rebase script]
 https://zerodie.github.io/blog/2012/01/19/git-rebase-i/

*把特定檔案還原到指定的 git log 時期的樣子
 git checkout {指定的 git log} {file name}

*如果沒有圖形化介面的 gitk,可用
 git log –oneline –graph

*查看現在 local branch 是從哪的 remote 抓來的
 cat .git/FETCH_HEAD

*所有的 git log
  .git/logs



值得注意的是:
pull 的 server / review 的 server / push 的 server 可能不同,
設置 push 的 server 時,請去確認 repo upload 時,到底是推到哪?


ref. [Coding] repo & git 的使用方法