以前一直用cvs/svn,現在轉用repo和git做工程管理,一直迷糊當中,今天請同事科普了一下,以下純粹是從一個工程師簡單使用的角度,配合自己的見解總結而成,可能很多地方不準確,甚至不正確,以後如有發現,我會自己再來更新,當然,歡迎指正。
repo是google用python寫的用來管理git的腳本。
1、如何從服務器取一份代碼到本地
a、repo init -u URL -b branch配置參數,指明具體服務器及分支
repo init 表示在當前目錄下安裝repository,會在當前目錄創建一個.repo目錄
-u URL 表示從這個URL(服務器地址)中取得repository的manifest文件
-b branch表示選擇服務器的branch分支,沒有-b這個參數,默認爲master這個branch
關於branch的個人見解:git支持多分支管理,git對文件的管理具體體現就是文件夾下的一個.git目錄,每個分支對應.git目錄下的一個管理文件。
我們服務器上的用法是:repo init -u git://10.0.12.140/vmworks/platform/manifest.git -b develop
b、repo sync 從服務器取指定分支的代碼,相當於git clone
2、建立本地分支
a、 repo start XXX(分支名) --all 建立本地分支。直觀上,運行這條指令後纔有了.git目錄及目錄下的管理文件,這樣git命令才能使用。
b、使用git branch查看本地新建分支。可以使用git branch -r 查看遠端服務器分支,或用git branch -a查看所有分支。
3、代碼提交步驟(當本地代碼和服務器代碼沒有衝突時)
a、使用repo status,查看具體哪個git庫(project)需要提交。也就是列出需要提交代碼所屬.git目錄的具體路徑
b、cd 需要提交代碼所屬.git目錄的具體路徑。
c、git status列出了該.git目錄管理的文件中,所有的修改。
d、git add +修改文件的文件 ,git add 後可接多個文件,中間只要用空格隔開就可以了。
e、git commit -m “對修改所做的註釋” ,其中-m表示對代碼做了修改,-a表示的是添加的文件。這個參數在使用repo status時,是會列出來的。
關於git add 和git commit的個人見解:做完這兩部後,本地的.git目錄下的branch文件已經做了修改
f、 git push 遠端分支。
我們服務器上的用法是:git push [email protected]:/pub/git/vmworks/xxxHEAD:develop
g、git push太複雜,有一個簡單一點的方法:
在repo start 指令後使用:
repo forall -c 'git remote add origin [email protected]:/pub/git/vmworks/$REPO_PROJECT.git$@'
如果在某個庫中逐一添加遠端,使用命令:
git remote add origin [email protected]:/pub/git/vmworks/common.git
這樣 git push origin
4、代碼提交步驟(當本地代碼與服務器代碼衝突時)
a、將本地代碼更新到服務器最新代碼
git checkout -f
git pull
b、在最新代碼上做修改
c、回到以上第3步
5、git log用法
git log可以用來查看git的提交記錄。git log -p(或者 git log --pathc)可以產看詳細的提交內容能夠。
6、/.repo/manifest.xml有各個git分支的信息
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="aosp"
fetch="git://10.0.12.140/vmworks/" />
<default revision="refs/heads/develop"
remote="aosp"
sync-j="4" />
<project path="build" name="build" >
<copyfile src="core/root.mk" dest="Makefile" />
</project>
<project path="prebuilts" name="prebuilts" />
<project path="kernel" name="common" />
<project path="external/busybox" name="external/busybox" />
<project path="external/yaffs2" name="external/yaffs2" />
<project path="external/glibc-2.17" name="external/glibc-2.17" />
<project path="external/glib-2.36.0" name="external/glib-2.36.0" />
<project path="external/utils" name="external/utils" />
<project path="external/softap" name="external/softap" />
<project path="external/qt-4.8.4" name="external/qt-4.8.4" />
<project path="projects/cardvr" name="projects/cardvr" />
<project path="projects/gst_demo" name="projects/gst_demo" />
<project path="projects/ipcamera" name="projects/ipcamera" />
<project path="projects/sofia" name="projects/sofia" />
<project path="projects/vmtool" name="projects/vmtool" />
<project path="platform/gstreamer/core" name="platform/gstreamer/core" />
<project path="platform/gstreamer/depends" name="platform/gstreamer/depends" />
<project path="platform/gstreamer/gstapi" name="platform/gstreamer/gstapi" />
<project path="platform/gstreamer/plugin_gst" name="platform/gstreamer/plugin_gst" />
<project path="platform/gstreamer/plugin_vmc" name="platform/gstreamer/plugin_vmc" />
<project path="platform/ipcamera/doc" name="platform/ipcamera/doc" />
<project path="platform/ipcamera/libs" name="platform/ipcamera/libs" />
<project path="platform/ipcamera/sdk" name="platform/ipcamera/sdk" />
<project path="platform/ipcamera/sofia" name="platform/ipcamera/sofia" />
<project path="platform/ipcamera/utils" name="platform/ipcamera/utils" />
<project path="platform/ipcamera/vimicro" name="platform/ipcamera/vimicro" />
<project path="platform/android" name="platform/android" />
<project path="platform/openmax/hantro_omx" name="platform/openmax/hantro_omx" />
<project path="platform/openmax/on2_omx" name="platform/openmax/on2_omx" />
<project path="platform/openmax/common" name="platform/openmax/common" />
</manifest>