一、問題導(dǎo)讀
在利用 git 傳項目文件到遠程倉庫時,經(jīng)常發(fā)生網(wǎng)絡(luò)連接錯誤,例如:
fatal: unable to access 'https://github.com/biluko/RegionCLIP.git/': Failed to connect to github.com port 443 after 21106 ms: Timed out
再比如:
error: failed to push some refs to 'https://github.com/biluko/RegionCLIP.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
再比如:
fatal: unable to access 'https://github.com/biluko/RegionCLIP.git/': OpenSSL SSL_read: Connection was reset, errno 10054
這種類似的情況很多,每次都覺得不勝其擾,今天下午嘗試上傳五次,全都是以網(wǎng)絡(luò)問題而失敗,想著找到一種穩(wěn)定上傳的方式,來解決這個問題。
下面是我的最為順利的一次上傳流程:
二、完整的一個流程
2.1 初始化
打開命令行終端或 Git Bash,切換到你想要初始化為 Git 倉庫的目錄,運行以下的命令:
git init
Git 將在當前目錄中創(chuàng)建一個名為 “.git” 的子目錄,并將其設(shè)置為 Git 倉庫。此時,你就可以開始使用 Git 進行版本控制了。
如果一切順利,你將看到類似以下的輸出:
Initialized empty Git repository in /path/to/your/repository/.git/
這時,我們看一下對應(yīng)的文件夾:
2.2 從遠程倉庫拉取最新的更改并合并到當前分支
git pull 命令用于從遠程倉庫拉取最新的更改并合并到當前分支。你可以使用以下命令將遠程倉庫 https://github.com/biluko/RegionCLIP.git 的更改拉取到你的本地分支:
git pull https://github.com/biluko/RegionCLIP.git
請確保你在執(zhí)行該命令之前已經(jīng)初始化了一個 Git 倉庫(可以通過 git init 進行初始化)。此外,確保你有合適的訪問權(quán)限來訪問該遠程倉庫。
執(zhí)行 git pull 命令后,Git 會嘗試將遠程倉庫的最新更改自動合并到你的當前分支。如果存在沖突,你需要手動解決沖突并進行提交。完成合并后,你的本地分支將包含來自遠程倉庫的最新更改。
請注意,如果你之前已經(jīng)與該遠程倉庫建立了關(guān)聯(lián)(使用 git remote add 命令),你可以直接使用遠程倉庫的別名來代替 URL:
git pull origin
將 origin 替換為你所使用的遠程倉庫別名。
但是我使用這條命令會報錯,具體如下:
2.3 遠程倉庫的 SSH URL
使用上面的HTTP協(xié)議,會發(fā)生網(wǎng)絡(luò)不穩(wěn)定的情況,所以我改善一下方法,嘗試用SSH URL:
git pull git@github.com:biluko/RegionCLIP.git
git pull git@github.com:biluko/RegionCLIP.git 是使用 SSH 協(xié)議進行從遠程倉庫拉取更新的命令。這個命令會嘗試從 git@github.com:biluko/RegionCLIP.git 這個 SSH URL 對應(yīng)的遠程倉庫拉取最新的更改并合并到你的當前分支。
確保你已經(jīng)正確配置了 SSH 密鑰,并將其添加到你的 GitHub 帳戶中。
執(zhí)行這個命令時,Git 將使用 SSH 協(xié)議進行通信,使用你配置的 SSH 密鑰進行身份驗證。如果一切正常,Git 將拉取遠程倉庫的最新更改并嘗試將其合并到你的當前分支。
請確保在執(zhí)行這個命令之前已經(jīng)在本地 Git 倉庫目錄中執(zhí)行了 git init 命令進行初始化,以及設(shè)置了正確的遠程倉庫地址。
如果你遇到任何錯誤,請確保你的 SSH 密鑰配置正確,并且你具有訪問該遠程倉庫的權(quán)限。
備注信息:
在執(zhí)行 git pull git@github.com:biluko/RegionCLIP.git 命令時,你使用了遠程倉庫的 SSH URL。然而,這個命令的語法不完整,缺少了遠程倉庫的別名(remote)以及分支名稱。
正確的語法應(yīng)該是:
git pull <remote> <branch>
你需要將 替換為遠程倉庫的別名, 替換為你要拉取的分支的名稱。如果你還沒有添加遠程倉庫的別名,你可以使用 git remote add 命令添加遠程倉庫:
git remote add origin git@github.com:biluko/RegionCLIP.git
這將把遠程倉庫的別名設(shè)置為 origin。
然后,你可以使用以下命令來拉取遠程倉庫的指定分支的最新更改:
git pull origin <branch>
確保將 <branch>
替換為你要拉取的分支的名稱。
請注意,你需要先在本地進行初始化(使用 git init 命令)并配置正確的 SSH 密鑰,以確保你具有訪問遠程倉庫的權(quán)限。
2.4 添加到暫存區(qū)
git add . 命令用于將當前目錄下的所有變更(包括新添加的文件和已修改的文件)添加到 Git 的暫存區(qū),以備后續(xù)提交。
執(zhí)行 git add . 命令后,Git 將會掃描當前目錄及其子目錄下的所有文件,并將它們添加到暫存區(qū)。這意味著 Git 將跟蹤這些文件的變化,并在你執(zhí)行提交操作時將它們包含在提交中。
請注意,git add . 命令會將當前目錄及其子目錄中的所有文件添加到暫存區(qū),包括未跟蹤的文件。如果你只想將已修改的文件添加到暫存區(qū),而不包括新添加的文件或未跟蹤的文件,可以使用 git add -u 命令。
執(zhí)行 git add . 或 git add -u 后,你可以使用 git status 命令來查看暫存區(qū)的狀態(tài),確認被添加的文件是否正確。
記住,在執(zhí)行提交之前,你可能還需要執(zhí)行 git commit 命令將暫存區(qū)中的變更提交到本地倉庫。
git add .
上面只是展示的部分結(jié)果!
2.5 提交操作
git commit -m "RegionCLIP"
git commit -m “RegionCLIP” 是提交操作的命令,它會將你暫存區(qū)中的變更提交到本地倉庫,并為提交添加一個描述性的提交信息。
執(zhí)行該命令時,請確保已經(jīng)在執(zhí)行 git add 命令將需要提交的文件添加到暫存區(qū)。
解釋一下該命令的各個部分:
git commit:表示提交操作。
-m “RegionCLIP”:使用 -m 參數(shù)后面跟隨的雙引號內(nèi)的內(nèi)容作為提交的描述信息。你可以根據(jù)實際情況將 “RegionCLIP” 替換為更具體的提交信息,以便描述本次提交的內(nèi)容。
執(zhí)行 git commit -m “RegionCLIP” 命令后,Git 會將暫存區(qū)的變更提交到本地倉庫,并為該提交賦予指定的提交信息。
請注意,這只會將提交保存在你的本地倉庫中,并不會同步到遠程倉庫。如果你希望將本地提交推送到遠程倉庫,請執(zhí)行 git push 命令。
通過執(zhí)行提交操作,你可以將已暫存的文件的更改記錄到版本歷史中,并提供有關(guān)這次更改的描述信息。這對于跟蹤項目的發(fā)展和與團隊成員之間的協(xié)作非常有用。
2.6 將一個遠程倉庫添加為 Git 倉庫的遠程別名
git remote add origin git@github.com:biluko/RegionCLIP.git
git remote add origin git@github.com:biluko/RegionCLIP.git 是將一個遠程倉庫添加為 Git 倉庫的遠程別名(remote alias)。使用這個命令可以將名為 origin 的遠程別名與遠程倉庫的 URL git@github.com:biluko/RegionCLIP.git 相關(guān)聯(lián)。
解釋一下該命令的各個部分:
git remote add:表示添加遠程別名的操作。
origin:是你為遠程倉庫起的一個別名,你可以根據(jù)需要選擇一個有意義的名稱。通常情況下,我們使用 origin 作為默認的遠程倉庫別名。
git@github.com:biluko/RegionCLIP.git:是遠程倉庫的 SSH URL。
通過執(zhí)行 git remote add origin git@github.com:biluko/RegionCLIP.git 命令,你將在你的本地 Git 倉庫中添加了一個名為 origin 的遠程別名,該別名與指定的遠程倉庫的 URL 相關(guān)聯(lián)。
添加遠程別名后,你可以使用 origin 別名來指代該遠程倉庫,方便進行推送、拉取等與遠程倉庫的交互操作。例如,你可以使用 git push origin <branch>
將本地分支推送到 origin 遠程倉庫。
請確保在執(zhí)行該命令之前已經(jīng)初始化了一個 Git 倉庫(使用 git init 進行初始化)并配置了正確的 SSH 密鑰,以確保你具有訪問遠程倉庫的權(quán)限。
2.7 推送到遠程倉庫
git push origin master
git push origin master 是將本地的 master 分支推送到名為 origin 的遠程倉庫的命令。
解釋一下該命令的各個部分:
git push:表示推送操作。
origin:是你為遠程倉庫起的一個別名,用于指代遠程倉庫的 URL。在執(zhí)行 git remote add 命令時,我們通常將遠程倉庫的別名設(shè)置為 origin。
master:表示要推送的本地分支名稱。在這種情況下,你將推送本地的 master 分支到遠程倉庫。
通過執(zhí)行 git push origin master 命令,Git 將會將本地的 master 分支上的提交推送到名為 origin 的遠程倉庫。
請注意,如果你尚未在遠程倉庫中創(chuàng)建 master 分支,Git 將會創(chuàng)建一個新的 master 分支,并將本地的 master 分支上的提交推送到遠程倉庫。
確保在執(zhí)行該命令之前已經(jīng)將遠程倉庫的 URL 添加為遠程別名(使用 git remote add 命令),并具有足夠的權(quán)限來推送到該遠程倉庫。
在執(zhí)行推送操作之前,建議先進行 git commit 將本地的更改提交到本地倉庫。這樣可以確保推送的是最新的更改。
2.8 最后的結(jié)果
三、HTTP和SSH的理解
3.1 兩者的區(qū)別
GitHub 的 HTTP 和 SSH 是兩種不同的協(xié)議,用于與遠程倉庫進行通信和進行代碼的推送與拉取。它們之間的主要區(qū)別如下:
3.1.1 認證方式
HTTP 使用基于用戶名和密碼的認證方式,而 SSH 使用公鑰和私鑰對進行認證。
- HTTP:在使用 HTTP 協(xié)議時,你需要提供你的 GitHub 用戶名和密碼來進行身份驗證。這意味著每次與遠程倉庫通信時都需要輸入密碼。
- SSH:使用 SSH 協(xié)議時,你需要生成一對 SSH 密鑰(公鑰和私鑰)。將公鑰添加到你的 GitHub 帳戶中,而私鑰將保存在本地。在每次與遠程倉庫通信時,使用私鑰進行認證。這種方式更安全,因為不需要在每次通信時輸入密碼。
3.1.2 傳輸協(xié)議
HTTP 使用 HTTPS 協(xié)議進行數(shù)據(jù)傳輸,而 SSH 使用 SSH 協(xié)議進行數(shù)據(jù)傳輸。
- HTTP:使用 HTTPS 進行數(shù)據(jù)傳輸,通過加密和認證來確保通信的安全性。
- SSH:使用 SSH 協(xié)議進行數(shù)據(jù)傳輸,同樣具備加密和認證的功能,并且通過公鑰和私鑰的使用來確保通信的安全性。
3.1.3 倉庫克隆方式
克隆遠程倉庫時,你可以選擇使用 HTTP 或 SSH。
- HTTP:在使用 HTTP 進行克隆時,你可以使用倉庫的 HTTPS URL。
git clone https://github.com/username/repository.git
- SSH:在使用 SSH 進行克隆時,你可以使用倉庫的 SSH URL。
git clone git@github.com:username/repository.git
總的來說,SSH 協(xié)議相對更安全,因為它使用公鑰和私鑰進行身份驗證,并且數(shù)據(jù)傳輸也經(jīng)過加密。而 HTTP 協(xié)議更簡單,適用于一些對安全性要求不高的場景。選擇使用哪種協(xié)議取決于你的偏好和具體需求。
3.2 為什么SSH比HTTP的網(wǎng)絡(luò)顯得更加穩(wěn)定?
HTTP 在網(wǎng)絡(luò)通信過程中可能會遇到各種網(wǎng)絡(luò)報錯,而 SSH 相對更穩(wěn)定的原因可以歸結(jié)為以下幾點:文章來源:http://www.zghlxwxcb.cn/news/detail-766389.html
- 傳輸協(xié)議差異:HTTP 使用基于文本的協(xié)議,而 SSH 使用二進制協(xié)議。二進制協(xié)議相對于文本協(xié)議來說,傳輸效率更高,數(shù)據(jù)傳輸更可靠。
- 長連接與短連接:HTTP 是基于短連接的協(xié)議,每次請求都需要建立連接并進行關(guān)閉,這樣頻繁的連接建立和關(guān)閉操作增加了網(wǎng)絡(luò)傳輸?shù)拈_銷和延遲。而 SSH 建立的是長連接,減少了連接的建立和關(guān)閉次數(shù),提高了數(shù)據(jù)傳輸?shù)男省?/li>
- 加密與認證機制:SSH 使用公鑰和私鑰對進行身份認證和數(shù)據(jù)加密,這種機制提供了更高的安全性和數(shù)據(jù)完整性,有效地防止了中間人攻擊和數(shù)據(jù)篡改。而 HTTP 的認證機制相對簡單,只依賴于用戶名和密碼,安全性較弱。
- 端口限制:某些網(wǎng)絡(luò)環(huán)境可能對特定的網(wǎng)絡(luò)端口有限制,而 SSH 默認使用 22 端口,較少受到限制。而 HTTP 使用的默認端口是 80 或 443,根據(jù)網(wǎng)絡(luò)環(huán)境和防火墻的設(shè)置,可能會受到限制或阻止。
綜上所述,SSH 相對于 HTTP 具有更高的穩(wěn)定性和安全性,特別是在網(wǎng)絡(luò)不穩(wěn)定、對安全性要求較高或限制較多的環(huán)境下,使用 SSH 通信可以更可靠地進行遠程操作和數(shù)據(jù)傳輸。文章來源地址http://www.zghlxwxcb.cn/news/detail-766389.html
到了這里,關(guān)于【Git】Github 上傳文件到遠程倉庫時,經(jīng)常發(fā)生網(wǎng)絡(luò)錯誤,一個比較穩(wěn)定的連接方法及我的示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!