克隆遠程倉庫:git clone
我們先進入github上fork了個項目,然后獲取clone地址,如果你已經配置好了公鑰,你可以點擊黃色區域切換成SHH地址clone
在終端中輸入(先用HTTPS的地址) : git clone https://github.com/rongcheng2017/android-UniversalMusicPlayer.git
frc@frc:~/GitHub/study/GoodProjectForStudy$ git clone https://github.com/rongcheng2017/android-UniversalMusicPlayer.git
正克隆到 'android-UniversalMusicPlayer'...
remote: Counting objects: 3074, done.
remote: Total 3074 (delta 0), reused 0 (delta 0), pack-reused 3074
接收對象中: 100% (3074/3074), 7.62 MiB | 859.00 KiB/s, 完成.
處理 delta 中: 100% (1454/1454), 完成.
如果你不指定克隆到的文件夾名稱,默認會使用你鏈接最后的項目名做文件夾名,如果你想自己命名:git cloen xxxx fileName就行了
frc@frc:~/GitHub/study/GoodProjectForStudy$ git clone https://github.com/rongcheng2017/android-UniversalMusicPlayer.git
正克隆到 'android-UniversalMusicPlayer'...
remote: Counting objects: 3074, done.
remote: Total 3074 (delta 0), reused 0 (delta 0), pack-reused 3074
接收對象中: 100% (3074/3074), 7.62 MiB | 859.00 KiB/s, 完成.
處理 delta 中: 100% (1454/1454), 完成.
然后你就會在你指定的目錄下找到該克隆的目錄。進去該目錄,執行git status看看
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git status
位于分支 master
您的分支與上游分支 'origin/master' 一致。
無文件要提交,干凈的工作區
查看遠程倉庫 :git remote
如果我們想查看一個clone來的項目的遠程倉庫有哪些,該怎么辦呢,git remote
還是以當前項目為例
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote
origin
它告訴我們的有個叫origin的遠程倉庫,origin一般是你clone地址的遠程倉庫。
那么難道還有其他的遠程倉庫?當然有,這就是git體現分布式的地方,團隊開發的時候,你的搭檔們的倉庫也是你的遠程倉庫,當然這個之后再講。
看一下我之前開發項目中的情況:
frc@frc:~/SRT/YXTrain_Android$ git remote
hezhen
origin
yjj
你會發現我有三個遠程倉庫,一個是clone的遠程倉庫,其他兩個則是同事的遠程倉庫。
如果你覺得這樣太簡潔,想看他們遠程倉庫的地址:git remote -v
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote -v
origin https://github.com/rongcheng2017/android-UniversalMusicPlayer.git (fetch)
origin https://github.com/rongcheng2017/android-UniversalMusicPlayer.git (push)
你會發現有2個地址,fetch ,push這個我們后面會用到,先有個印象。
如果我們想值查看某個倉庫的詳情可以使用:git remote show remote-name:
frc@frc:~/SRT/YXTrain_Android$ git remote show yjj
* 遠程 yjj
獲取地址:git@git.oschina.net:yangjunjian/YXTrain_Android.git
推送地址:git@git.oschina.net:yangjunjian/YXTrain_Android.git
HEAD分支:master
遠程分支:
hotfix 已跟蹤
hotfix_huawei6.0 已跟蹤
master 已跟蹤
temp 已跟蹤
為 'git push' 配置的本地引用:
master 推送至 master (本地已過時)
添加遠程倉庫:git remote add remote-name pathUrl
之前看到我工作中的項目中有三個遠程倉庫,那么除了origin外其他兩個是怎么添加的呢? git remote add remote-name pathUrl
我想在這個項目下添加我同事的遠程倉庫:
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote add hz git@git.oschina.net:zhenheli/YXTrain_Android.git
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote -v
hz git@git.oschina.net:zhenheli/YXTrain_Android.git (fetch)
hz git@git.oschina.net:zhenheli/YXTrain_Android.git (push)
origin https://github.com/rongcheng2017/android-UniversalMusicPlayer.git (fetch)
origin https://github.com/rongcheng2017/android-UniversalMusicPlayer.git (push)
通過git remote -v 可以看到我們添加成功了
刪除遠程倉庫:git remote remove remote-name
看上面的hz倉庫的遠程地址,很明顯是另外一個項目的倉庫,所以我們要把hz移除。能添加肯定能移除:
rc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote
hz
origin
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote remove hz
frc@frc:~/GitHub/study/GoodProjectForStudy/android-UniversalMusicPlayer$ git remote
origin
通過git remote 可以看到只剩origin了,說明刪除成功。
抓取遠程倉庫代碼:git fetch remote-name
既然我們能從orgin上clone下代碼,那么我們如何獲取其他遠程倉庫的代碼呢?
還記得我們給git remote -v時,會給每個倉庫名對應了兩個地址,一個是fetch ,一個是push的。所以我只需要 git fech 遠程倉庫名 就行了。
frc@frc:~/SRT/YXTrain_Android$ git remote
hezhen
origin
yjj
frc@frc:~/SRT/YXTrain_Android$ git fetch yjj
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 7), reused 0 (delta 0)
展開對象中: 100% (12/12), 完成.
來自 git.oschina.net:yangjunjian/YXTrain_Android
* [新分支] master -> yjj/master
我們抓取下yjj這個遠程倉庫的代碼,看看你與我們的有什么差異。
當然我們也可以fetch origin,因為你如果關注的是個三方的開源項目,該項目完全可能在你clone后更新,你可以通過fetch origin來保持同步更新。
推送到遠程倉庫:git push remote-name
既然可以抓取,就能推送。你可以把你本地的修改推送到遠程倉庫上,當然這中間如果是多人合作開發,肯定還有許多合并以及權限問題:
frc@frc:~/SRT/YXTrain_Android$ git push yjj
To git.oschina.net:yangjunjian/YXTrain_Android.git
! [rejected] master -> master (non-fast-forward)
error: 無法推送一些引用到 'git@git.oschina.net:yangjunjian/YXTrain_Android.git'
提示:更新被拒絕,因為您當前分支的最新提交落后于其對應的遠程分支。
提示:再次推送前,先與遠程變更合并(如 'git pull ...')。詳見
提示:'git push --help' 中的 'Note about fast-forwards' 小節。
你看我想將我在這項目上的更改推送到yjj的遠程倉庫就失敗了。
但是如果推送到自己的項目就ok了(如果推送到origin上,可以不寫origin)
frc@frc:~/SRT/YXSanKe_Android$ git push
Username for 'https://git.oschina.net': fengrongcheng
Password for 'https://fengrongcheng@git.oschina.net':
對象計數中: 21, 完成.
Delta compression using up to 4 threads.
壓縮對象中: 100% (18/18), 完成.
寫入對象中: 100% (21/21), 1.74 KiB | 0 bytes/s, 完成.
Total 21 (delta 15), reused 0 (delta 0)
To https://git.oschina.net/yanxiu/YXSanKe_Android.git
2ba646b..acc7e7a master -> master