1. 程式人生 > >Git版本控制:Git遠端倉庫

Git版本控制:Git遠端倉庫

遠端庫建立總結

生成sshkey:ssh-keygen -t rsa -C "***@126.com"

Note: 如果不支援圖形形式的key可以開啟pub檔案複製其中的內容也可以。

$ git config --global user.name "***"

$ git config --global user.email "***@126.com"

Note: 檢視當前的git使用者名稱以及email: git config --local --list。

在github上建立完一個repository或者create a new repository on the command line
在本地的某個要使用git版本控制的目錄下


git init
新增exclude
git add .
git commit -m "first commit"
git remote add origin [email protected]:***/***.git
git push -u origin master


…or push an existing repository from the command line
git remote add origin [email protected]:***/***.git
git push -u origin master
Note: 上面就是來自在github上建立完一個repository後的提示。

前提

本地建立Git倉庫

(已經建立本地庫[$ cd 'E:\mine\pythonworkspace'   $ git init])

又想在GitHub建立一個Git倉庫,並且讓這兩個倉庫進行遠端同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作。

github上註冊使用者

Git遠端倉庫ssh設定

可以找一臺電腦充當伺服器的角色,每天24小時開機,其他每個人都從這個“伺服器”倉庫克隆一份到自己的電腦上,並且各自把各自的提交推送到伺服器倉庫裡,也從伺服器倉庫中拉取別人的提交。

GitHub或者gitlab網站就是提供Git倉庫託管服務的,只要註冊一個GitHub賬號,就可以免費獲得Git遠端倉庫。

第1步:建立SSH Key

如果使用者主目錄下,已經有了.ssh目錄,且包含id_rsaid_rsa.pub檔案,則可直接跳到第2步(最好不要重新生成了,不然之前如果在其它地方設定過,設定就無效了)。

如果沒有,開啟Shell(Windows下開啟Git Bash),建立SSH Key:

$ ssh-keygen -t rsa -C "***@126.com"

Note: 需要把郵件地址換成你自己的郵件地址,一路回車,使用預設值即可,無需設定密碼, 這裡一般不使用金鑰。

第2步:登陸GitHub設定

找到公鑰 (linux: cat ~/.ssh/id_rsa.pub;  windows: C:\Users\pi\.ssh)

id_rsa.pub是公鑰,可以放心地告訴任何人。

“Account settings” > “SSH Keys” > “Add SSH Key” > 填上任意Title(如pipi ubuntu) > 在Key文字框裡貼上id_rsa.pub檔案的內容 > “Add Key”

為什麼GitHub需要SSH Key呢?

因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支援SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。

當然,GitHub允許你新增多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裡提交,只要把每臺電腦的Key都新增到GitHub,就可以在每臺電腦上往GitHub推送了。

最後友情提示,在GitHub上免費託管的Git倉庫,任何人都可以看到的(但只有你自己才能改)。所以,不要把敏感資訊放進去。

如果你不想讓別人看到Git庫,有兩個辦法:

一個是交費,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了。

另一個辦法是自己動手,搭一個Git伺服器,因為是你自己的Git伺服器,所以別人也是看不見的。

每次 Push 的時候如何不用輸入密碼?
可以有2個辦法:
針對 SSH 協議的方式, 配置SSH 公鑰,使用 SSH 協議操作,具體見 SSH 公鑰配置
對於 Https 協議
首先在全域性配置儲存你的密碼, ~/.git-credentials (沒有就建立)內新增 https://{username}:{passwd}@git.coding.net
然後配置 Git 命令儲存認證,
$git config –global credential.helper store
~/.gitconfig 檔案多出下面配置項:
credential.helper = store

修改git的傳輸位元組限制,讓git可以上傳大檔案

git config http.postBuffer 524288000

使用遠端庫

注意git管理是可以巢狀的,一個大目錄(對應遠端的repository1)下面可以有好多小目錄(對應遠端的repository2-n)。這樣push後也會對應到不同遠端中。好像git 2.0不會自動push子git目錄的內容了。

建立遠端倉庫

登陸GitHub > 右上角“Create a newrepo” > 建立新的倉庫 > 填寫倉庫名 如在Repositoryname填入python_workspace ,其他保持預設設定,點選“Create repository”按鈕,就成功地建立了一個新的Git倉庫.

目前,在GitHub上的這個python_workspace倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。

給遠端的程式碼庫起個別名git remote add <alias><remote address>

在本地的python_workspace倉庫(當前git目錄)下執行命令:

git remote add origin [email protected]:pplove/python_workspace.git

Note:

1. 上面的地址來自你的賬戶 >選擇某個賬戶 > 點選https右邊的ssh就會出現對應的ssh地址(也就是你的repository對應的ssh地址)

這裡要注意地址要用ssh地址,而不是http地址!!上面列出的地址只有 origin 用的是 SSH URL 連結,只有這個倉庫能推送資料上去。http不行,但是可以通過 HTTP 克隆和獲取倉庫的內容。

使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http埠的公司內部就無法使用ssh協議而只能用https。

2. 請千萬注意,把上面的pplove替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠端庫,關聯沒有問題,但是你以後推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。

3. 新增後,遠端庫的名字就是origin,這是Git預設的叫法,也可以改成別的,但是origin這個名字一看就知道是遠端庫。如果提示已經存在這個遠端庫名,可以改成另一個名字。

git變更專案地址

git remote set-url origin [email protected]***.git

git remote -v

檢視git提交和拉取地址

可以加上 -v 選項( --verbose 的簡寫),顯示對應的克隆地址:
$ git remote -v
origin  git://github.com/***/***.git (fetch)
origin  git://github.com/***/***.git (push)

提交程式碼給遠端程式碼庫 git push <alias><branch name>

下一步,就可以把本地庫的所有內容推送到遠端庫上:

由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

git push -u origin master

Counting objects: 19, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (19/19), done.

Writing objects: 100% (19/19), 13.73 KiB, done.

Total 23 (delta 6), reused 0 (delta 0)

To [email protected]:michaelliao/learngit.git

 * [newbranch]      master -> master

Branch master set up to track remote branch master fromorigin.

Note: 如果忘加master git push -u origin或者直接git push,就會報錯:fatal: The current branch master has no upstream branch.To push the current branch and set the remote as upstream, use    git push --set-upstream origin master

Note:

1. 注意要先有已經commit好的本地倉庫。Git本地倉庫

2. 把本地庫的內容推送到遠端,用gitpush命令,實際上是把當前分支master推送到遠端。

3.注意,如果在github上建立了一個readme.md,則先要執行git pull origin master將readme.md拉取下來,保持遠端和本地資料一致,不然就會git push失敗:error: failed to push some refs to '[email protected]:...'.updates were rejected because the remote contains work that you do not have locally.

4. 推送成功後,可以立刻在GitHub頁面中看到遠端庫的內容已經和本地一模一樣。

從現在起,只要本地作了提交,就可以通過命令:

git push (使用當前分支並push到遠端對應分支)

git push origin dev (指定分支push)

把本地master分支的最新修改推送至GitHub,現在,你就擁有了真正的分散式版本庫!

Note:Git 1.x 的預設行為是matching,其意是如果你執行 git push 但沒有指定分支,它將 push 所有你本地的分支到遠端倉庫中對應匹配的分支。而 Git 2.x 預設的是 simple,意味著執行 git push 沒有指定分支時,只有當前分支會被 push 到你使用 git pull 獲取的程式碼。

將所有本地分支都推送到origin主機

git push --all origin

--force選項

如果遠端主機的版本比本地版本更新,推送時Git會報錯,要求先在本地做git pull合併差異,然後再推送到遠端主機。這時,如果你一定要推送,可以使用--force選項。
$ git push --force origin 
上面命令使用--force選項,結果導致遠端主機上更新的版本被覆蓋。除非你很確定要這樣做,否則應該儘量避免使用--force選項。

push之前檢視push的內容

git diff origin/dev...HEAD --name-status

常用:git diff origin/master...HEAD --name-only | xargs ls -lh

Note: dev可以為任何分支名;去掉--name-status則顯示每個檔案的具體變化,加上則只顯示有變化的檔案。顯示結果中D代表delete的檔案;A代表add的檔案;M代表modified的檔案。

SSH警告

當你第一次使用Git的clone或者push命令連線GitHub時,會得到一個警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can'tbe established.

RSA key fingerprint is xx.xx.xx.xx.xx.

Are you sure you want to continue connecting (yes/no)?

這是因為Git使用SSH連線,而SSH連線在第一次驗證GitHub伺服器的Key時,需要你確認GitHub的Key的指紋資訊是否真的來自GitHub的伺服器,輸入yes回車即可。

Git會輸出一個警告,告訴你已經把GitHub的Key新增到本機的一個信任列表裡了。

出錯處理

如果沒有git commit直接git push -u origin master會報錯:error: src refspec master does not match any.

從遠端程式碼庫拉取某個分支(預設是master

git pull <alias> <branch name>

如git pull origin dev

也可以通過git pull直接拉取不指定分支,不過不在master分支上時git pull遠端程式碼到本地可能需要先設定一下遠端和本地分支的對應:
$git branch --set-upstream-to=origin/dev dev
Branch dev set up to track remote branch dev from origin.

git2.0以上的git pull規則好像是這樣的:如果遠端的檔案比本地新(修改時間),則會與本地合併,生成<===標記的衝突來手動解決(pull後直接輸入命令git mergetool);如果遠端檔案比本地舊,則本地檔案並不會改變,仍和遠端不一樣。

git pull實際是git fetch和git merge,只是它把過程的細節都隱藏了起來,以至於你不用去了解git中各種型別分支的區別和使用方法。

其它分支的提交

>>dev
git checkout -b dev
git push -u origin dev

Git pull衝突處理

git子專案submodule

開發過程中,經常會有一些通用的部分希望抽取出來做成一個公共庫來提供給別的工程來使用。

為當前工程新增submodule

git submodule add 倉庫地址 路徑

Note:

1. 倉庫地址是指子模組倉庫地址,路徑指將子模組放置在當前工程下的路徑。
2. 路徑不能以 / 結尾(會造成修改不生效)、不能是現有工程已有的目錄(不能順利 Clone)

命令執行完成,會在當前工程根路徑下生成一個名為“.gitmodules”的檔案,其中記錄了子模組的資訊。新增完成以後,再將子模組所在的資料夾新增到工程中即可。
刪除git子專案

首先刪除.gitmodules檔案中相應配置資訊。然後git rm –cached命令將子模組所在的檔案從git中刪除。
下載帶有submodule的工程

當使用git clone下來的工程中帶有submodule時,初始的時候,submodule的內容並不會自動下載下來的,此時,只需執行如下命令:

git submodule update --init --recursive

這樣子模組內容下載下來後工程才不會缺少相應的檔案。

從遠端庫克隆

之前我們是先有本地庫,後有遠端庫的時候,學習如何關聯遠端庫。現在我們

先建立遠端庫,然後從遠端庫克隆,這個可以實現多人合作,遠端庫不一定是自己建立的。

$ git clone [email protected]:pplove/***_workspace.git

clone的地址如果是ssh地址,要先進行ssh設定,否則出錯:Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.

如果不想設定,當然也可以clone https地址,同樣可以下載好。

$ git clone  https://github.com/***.git

也可以直接下載rar壓縮檔案,這樣下載下來的專案中沒有.git,但是下載的檔案最全。(git clone有時候clone不下來所有的檔案,不知道專案怎麼設定了,有的目錄是clone不下來的)

報錯:git: fatal: I don't handle protocol '​​http'

在 git clone 與 https 之間雖然看起來是空白,但其實另外夾著一些字元,導致 url 無法被正常辨識。這種錯誤往往是從網頁反白複製 git url 時會出現,就連 github 也是如此。把空白刪掉重打一次 正常的空白 就恢復正常了。那段不明的字元似乎是 Zero-width space,直譯就是零寬度空白,通常用於排版或反制 url 偵測。

從github遠端庫上下載單個檔案或資料夾

開啟GitZip輸入檔案或資料夾的地址進行下載。

下載前需要新增API Access Token,否則會提示Error: url not valid。新增Token直接點選Get Token,github授權, 下載token檔案後打開復制token到下圖的框框中就可以成功下載了。

搭建Git伺服器

在遠端倉庫中,我們知道遠端倉庫實際上和本地倉庫沒啥不同,純粹為了7x24小時開機並交換大家的修改。

GitHub就是一個免費託管開原始碼的遠端倉庫。但是對於某些視原始碼如生命的商業公司來說,既不想公開原始碼,又捨不得給GitHub交保護費,那就只能自己搭建一臺Git伺服器作為私有倉庫使用。

搭建Git伺服器需要準備一臺執行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。

sudo許可權的使用者賬號,開始安裝git

第一步,安裝git

$ sudo apt-get install git

第二步,建立一個git使用者,用來執行git服務:

$ sudo adduser git

第三步,建立證書登入:

收集所有需要登入的使用者的公鑰,就是他們自己的id_rsa.pub檔案,把所有公鑰匯入到/home/git/.ssh/authorized_keys檔案裡,一行一個。

第四步,初始化Git倉庫:

先選定一個目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:

$ sudo git init --bare sample.git

Git就會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓使用者直接登入到伺服器上去改工作區,並且伺服器上的Git倉庫通常都以.git結尾。然後,把owner改為git

$ sudo chown -R git:git sample.git

第五步,禁用shell登入:

出於安全考慮,第二步建立的git使用者不允許登入shell,這可以通過編輯/etc/passwd檔案完成。找到類似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改為:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣,git使用者可以正常通過ssh使用git,但無法登入shell,因為我們為git使用者指定的git-shell每次一登入就自動退出。

第六步,克隆遠端倉庫:

現在,可以通過git clone命令克隆遠端倉庫了,在各自的電腦上執行:

$ git clone [email protected]:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就簡單了。

管理公鑰

如果團隊很小,把每個人的公鑰收集起來放到伺服器的/home/git/.ssh/authorized_keys檔案裡就是可行的。如果團隊有幾百號人,就沒法這麼玩了,這時,可以用Gitosis來管理公鑰。

這裡我們不介紹怎麼玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。

管理許可權

有很多不但視原始碼如生命,而且視員工為竊賊的公司,會在版本控制系統裡設定一套完善的許可權控制,每個人是否有讀寫許可權會精確到每個分支甚至每個目錄下。因為Git是為Linux原始碼託管而開發的,所以Git也繼承了開源社群的精神,不支援許可權控制。不過,因為Git支援鉤子(hook),所以,可以在伺服器端編寫一系列指令碼來控制提交等操作,達到許可權控制的目的。Gitolite就是這個工具。這裡不介紹Gitolite了,不要把有限的生命浪費到許可權鬥爭中。

http://www.liaoxuefeng.com/

相關推薦

Git版本控制Git遠端倉庫

遠端庫建立總結 生成sshkey:ssh-keygen -t rsa -C "***@126.com" Note: 如果不支援圖形形式的key可以開啟pub檔案複製其中的內容也可以。 $ git config --global user.name "***" $

Git版本控制Git安裝與配置

@概述 Git是GitHub開源社群的版本管理系統; 下載地址:https://git-scm.com/download/ Git的安裝:一路使用預設設定進行安裝即可,最後一步時選擇將GitBash新增到桌面和快速啟動選單; 雙擊啟動GitBash命令列工具;  @Git

Git版本控制Git查閱、撤銷檔案修改和撤銷檔案追蹤

檢視檔案的修改歷史git log --pretty=oneline 檔名 # 顯示修改歷史[Git高階教程:git log與git reflog]git show 356f6def9d3fb7f3b9032ff5aa4b9110d4cca87e # 檢視更改歷史版本檢視和對比

git版本控制如何處理當前分支為*(no branch)的情況

在使用git branch命令檢視當前環境所在的開發分支時,如果出現*(no branch),則表示當前不處於任何分支,這時可以通過如下幾種方法處理,以便於後續專案版本的管理: 1:git checkout -b 分支名;此時新建立的分支與*(no branch)軟體一樣

Git版本控制Gitlab及Coding.net的使用

Gitlab介紹 GitLab是利用 Ruby on Rails 一個開源的版本管理系統,實現一個自託管的Git專案倉庫,可通過Web介面進行訪問公開的或者私人專案。它擁有與Github類似的功能,能夠瀏覽原始碼,管理缺陷和註釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過

第二天,Ruby on Rails,Git版本控制,更新到遠端倉庫,部署

2018年11月30日 用Git做版本控制,我們暫時不用smartgit,就用本地的git。 在使用之前要做一些系統設定,設定你的使用者名稱和郵箱,這個設定只需一次 $ git config --global user.name "dongfangyier" $ git config -

git版本控制之上傳檔案至遠端伺服器及拉取遠端倉庫檔案至本地伺服器

git上傳檔案至遠端伺服器github1.     上傳操作(1)命令列進入在專案目錄下:cd workspase(2)初始化:git init(3)連線遠端倉庫:git remote add origin github對應倉庫地址以上已設定則直接跳過(4)提交至本地倉庫:g

Git版本控制Git分支處理

rgb 方法 發現 速度 pip 命令 ria p s 你會 http://blog.csdn.net/pipisorry/article/details/46958699分支的意義創建分支能夠避免提交代碼後對主分支的影響,同一時候也使你有了相對獨立的開發環境。假設你準備

第二次作業分布式版本控制系統Git的安裝與使用

tty tps ssh-key 第二次作業 版本信息 公鑰 mail d+ data- 作業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 遠程倉庫的地址:https://github.

作業二分布式版本控制系統Git的安裝與使用

練習 倉庫 用戶名 本地倉庫 nbsp lin -m 版本管理 版本控制 作業要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 1.下載安裝配置用戶名和郵箱。 (1)下載安裝Git

版本控制SVN和GIT的一些使用感受(續)

背景:         緊接上文,從本地獨立開發者角度出發,繼續對從SVN集中式版本管理轉向GIT分散式版本管理的細節進行介紹。此次以自己具體的開發例項為基礎,給出GIT管理從整體專案SVN伺服器檢出來的本地工作副本的詳細過程。 GIT與SVN的結合:         為了

版本控制集中式(SVN) vs 分散式(GIT

Linus一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分散式版本控制系統,集中式和分散式版本控制系統有什麼區別呢? 先說集中式版本控制系統,版本庫是集中存放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從中央伺服器取得最新的版本,然後開始幹活,幹

版本控制SVN和GIT的一些使用感受

背景:          原本在學校跟隨導師做專案的時候,就一直在使用版本管理,主要是用來記錄專案的修改,專案成員之間的溝通和交流。使用的服務端是Visual SVN,客戶端是TortoiseSVN,常用的TortoiseSVN指令也僅限於SVN Update和SVN Co

Git版本控制

官網 新建 not one push commit git clone hub 添加 1.Git基礎命令的使用 git status:檢查當前文件的狀態。 如果當前沒有任何跟蹤文件,也沒有任何文件在上次提交後更新過,總的 來說就是沒有可提交的文件的時候,

git版本控制文件提交到composer應用市場

cnblogs 地址 新建 com compose ack pack 應用市場 -c 要把github中的項目提交到composer中去,必須在github管理的項目中新建對應的composer.json文件, composer.json文件建立的方法 cmd定位

1.git版本控制工具的安裝與使用

use ssh-key origin read name log -- cache 本地倉庫 git下載 官方地址:https://git-scm.com/download/win 百度雲地址:我的網盤/安裝文件/Git-2.15.0-64-bit.rar git基本使

版本控制系統-----Git學習筆記

git 高級服務 版本控制系統 版本控制是一種記錄若幹文件內容變化,以便將來查閱特定版本修訂情況的系統。大部分時候我們使用最頻繁的還是對源代碼文件的版本控制,其實任何文件都可以納入版本控制系統。 git屬於分布式版本控制系統: 客戶端並不只提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下

版本控制——1.Git常用操作

git init git push code AS 默認 word -m sta 輸入 git簡介: 目前世界上最好用的分布式版本控制系統 Git配置 Win平臺: 在Git官網下載安裝即可,也可以直接使用一些Terminal,例如Cmder等,下載安裝其Full Vers

Git版本控制之ubuntu搭建Git服務器

open sudoer nload git倉庫 詳細 測試 lan inf 解決   Git是一個開源的分布式版本控制系統,可以有效、高效的處理從很小到非常大的項目版本管理。使得開發者可以通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫,也可以將代碼提交

分布式版本控制系統Git的安裝與使用

com tps egit status 單行 git倉庫 查看 下載 組合 作業要求: https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103 1.下載安裝配置用戶名和郵箱。 2. 創建工作目