如何在多個 Git 平臺玩轉(zhuǎn)一個倉庫

版本控制在軟件開發(fā)中至關(guān)重要延届,而 Git 是廣泛使用的代碼管理工具避除。有時,我們可能需要在多個平臺 (如 GitHubGitLabGitee) 上同步同一 Git 倉庫让网,以便備份蛤签、協(xié)作等辞友。

本文將帶你玩轉(zhuǎn)此操作,其中關(guān)鍵是“配置 SSH” 和“遠(yuǎn)程倉庫”震肮。首先称龙,我們來講述 SSH 的配置。

配置 SSH

為確保安全和簡化登錄钙蒙,需配置 SSH 密鑰茵瀑。SSH 密鑰是用于身份驗證的安全方式,可免密訪問遠(yuǎn)程 Git 倉庫躬厌。

檢查現(xiàn)有 SSH 密鑰

在生成新的 SSH 密鑰之前马昨,應(yīng)該檢查本地電腦是否存在現(xiàn)有密鑰竞帽。打開終端,輸入一下命令以查看是否存在現(xiàn)有的 SSH 密鑰鸿捧。

ls -al ~/.ssh

此命令將列出 .ssh 目錄中的所有文件(如果存在)屹篓。如果沒有想要的,需要創(chuàng)建新的 SSH 密鑰對匙奴。

生成新 SSH 密鑰

在本地電腦上生成新的 SSH 密鑰堆巧。 生成密鑰后,可將公鑰添加到 GitHub 等平臺上的帳戶中泼菌,以便通過 SSH 為 Git 操作啟用身份驗證谍肤。

打開終端輸入一下命令,然后一路 Enter 鍵哗伯,完成密鑰對的生成:

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_github

在這個命令中:

  • ssh-keygen 用于生成荒揣、管理和轉(zhuǎn)換認(rèn)證密鑰的工具。
  • -t 指定了密鑰類型焊刹。ed25519 是一種現(xiàn)代的系任、安全的公鑰加密算法,被廣泛認(rèn)為是非常強大且高效的虐块。與 RSA 和 DSA 密鑰相比俩滥,它提供了更好的安全性和性能。
  • -C 指定一個注釋贺奠,通常是用戶的電子郵件地址霜旧。
  • -f 指定了密鑰文件的保存位置和名稱。默認(rèn)情況下敞嗡,ssh-keygen 會生成名為 id_rsa颁糟、id_ed25519 等的文件,具體取決于所選的密鑰類型喉悴。在這里棱貌,它將被保存為 ~/.ssh/id_github (私鑰) 和 ~/.ssh/id_github.pub (公鑰)。

相關(guān)鏈接:

編輯 ~/.ssh/config 文件

為了在一臺電腦上配置多個平臺的 SSH箕肃,你需要編輯 ~/.ssh/config 文件婚脱。以下是一個配置示例,分別配置了 GitHub勺像、GitLabGitee 的 SSH:

# GitHub 配置
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_github
    PreferredAuthentications publickey,password  # 優(yōu)先使用 SSH 公鑰認(rèn)證障贸,然后再嘗試用戶名和密碼認(rèn)證
    IdentitiesOnly yes

# GitLab 配置
Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_gitlab
    PreferredAuthentications publickey  # 僅使用 SSH 公鑰認(rèn)證
    IdentitiesOnly yes

# Gitee 配置
Host gitee.com
    HostName gitee.com
    User git
    IdentityFile ~/.ssh/id_gitee
    PreferredAuthentications publickey  # 僅使用 SSH 公鑰認(rèn)證
    IdentitiesOnly yes

在這個配置中:

  • Host 是你定義的別名,可以隨意命名吟宦,但通常使用服務(wù)域名以方便記憶篮洁。
  • HostName 是實際的服務(wù)域名。
  • User 通常是 git殃姓,因為這是大多數(shù) Git 服務(wù)器的默認(rèn)用戶名袁波。
  • IdentityFile 指向你的私鑰文件路徑瓦阐。
  • PreferredAuthentications 指定 SSH 客戶端在嘗試身份驗證時應(yīng)優(yōu)先考慮的認(rèn)證方法列表。例如篷牌,你可以設(shè)置為只使用公鑰認(rèn)證睡蟋,或者優(yōu)先使用公鑰認(rèn)證,然后再嘗試其他 (密碼) 認(rèn)證方式枷颊。
  • IdentitiesOnly yes 指示 SSH 只使用 IdentityFile 指定的身份進(jìn)行認(rèn)證戳杀,這有助于避免 SSH 代理或默認(rèn)私鑰的干擾。

新增 SSH 密鑰到平臺帳戶

配置 ~/.ssh/config 文件完畢后夭苗,必須將 SSH 公鑰添加到 GitHub信卡、GitLabGitee,才能為帳戶啟用 SSH 訪問题造。

相關(guān)鏈接:

測試 SSH 連接

設(shè)置 SSH 密鑰并將其添加到 GitHub坐求、GitLabGitee 后,可以測試連接晌梨。

測試 SSH 連接之前,應(yīng)已完成以上所有步驟须妻。

打開終端仔蝌,輸入以下命令:

ssh -T git@github.com          # 測試 Github 的 SSH 連接

ssh -T git@gitlab.example.com  # 測試 Gitlab 的 SSH 連接。注意:要將 gitlab.example.com 替換為你的實例 URL

ssh -T git@gitee.com           # 測試 Gitee 的 SSH 連接

如果這是你第一次連接荒吏,你應(yīng)該會看到類似以下消息敛惊,提示你需要驗證平臺主機(jī)的真實性:

> The authenticity of host ' (IP ADDRESS)' can't be established.
> ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
> Are you sure you want to continue connecting (yes/no)?

輸入 yes,然后按 Enter绰更。

> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.

添加成功后瞧挤,就可以使用 SSH 協(xié)議訪問這些平臺了。例如儡湾,你可以使用 git clone git@github.com/username/repository.git 來克隆 GitHub 上的倉庫特恬,SSH 會根據(jù) ~/.ssh/config 文件中的配置來選擇合適的私鑰進(jìn)行身份驗證。

相關(guān)鏈接:

我們?yōu)殡娔X配置完 SSH 后徐钠,接下來為本地 Git 倉庫添加多個遠(yuǎn)程平臺的倉庫鏈接癌刽。

配置遠(yuǎn)程倉庫

沒有 Git 倉庫

為 Git 倉庫添加多個遠(yuǎn)程平臺的倉庫的前提是得有個本地 Git 倉庫。如果你還沒有尝丐,可以用以下命令初始化一個显拜。

cd your_folder
git init --initial-branch=main

已經(jīng)有 Git 倉庫

如果你已經(jīng)在其中一個平臺上有個 Git 倉庫,你可以使用以下命令將其克隆到本地爹袁。

git clone <遠(yuǎn)程倉庫URL>

然后远荠,cd 到新初始化、或者克隆下來的倉庫目錄失息,添加其他平臺的遠(yuǎn)程倉庫鏈接 ??譬淳。

查看遠(yuǎn)程倉庫

添加之前档址,我們先查看一下本地 Git 倉庫是否有遠(yuǎn)程倉庫的鏈接,在終端執(zhí)行以下命令:

git remote -v

如果剛才是本地新初始化的 Git 倉庫瘦赫,不會有任何信息打印辰晕。但是,剛才是從遠(yuǎn)程平臺克隆下來的确虱,就會有以下信息打印含友。比如,我們是從 Github 克隆的校辩。

origin  git@github.com:liam-i/git-multi-platform-sync.git (fetch)
origin  git@github.com:liam-i/git-multi-platform-sync.git (push)

刪除遠(yuǎn)程倉庫

為了明確指向多平臺遠(yuǎn)程倉庫窘问,所以我們用以下命令刪除不直觀的 origin,稍后再添加一個具有明確指向性的別名宜咒。

git remote remove origin

添加遠(yuǎn)程倉庫

為了將本地倉庫與其他平臺的遠(yuǎn)程倉庫關(guān)聯(lián)起來惠赫,需要執(zhí)行以下命令為它們添加別名。

git remote add <別名> <遠(yuǎn)程倉庫URL>

例如故黑,你可以為 GitHub 倉庫添加別名 github儿咱,為 GitLab 倉庫添加別名 gitlab

git remote add github git@github.com:liam-i/git-multi-platform-sync.git
git remote add gitlab ssh://git@gitlab.com:liam-i/git-multi-platform-sync.git
git remote add gitee git@gitee.com:liam-i/git-multi-platform-sync.git

添加完成后,我們再用 git remote -v 命令查看一下:

$ git remote -v

github  git@github.com:liam-i/git-multi-platform-sync.git (fetch)
github  git@github.com:liam-i/git-multi-platform-sync.git (push)
gitlab  ssh://git@gitlab.com:liam-i/git-multi-platform-sync.git (fetch)
gitlab  ssh://git@gitlab.com:liam-i/git-multi-platform-sync.git (push)
gitee   git@gitee.com:liam-i/git-multi-platform-sync.git (fetch)
gitee   git@gitee.com:liam-i/git-multi-platform-sync.git (push)

同步操作

推送代碼

當(dāng)你對本地倉庫進(jìn)行了修改场晶,并提交了新的更改后混埠,可以使用以下命令將這些更改推送到所有遠(yuǎn)程平臺:

git push <別名> <分支名>

例如,將更改推送到 GitHub诗轻、GitLabGitee

git push github main
git push gitlab main
git push gitee main

拉取代碼

如果你想從某個遠(yuǎn)程倉庫拉取最新的更改到本地钳宪,可以使用以下命令:

git pull <別名> <分支名>

例如,從 GitHub扳炬、GitLabGitee 拉取更改:

git pull github main
git pull gitlab main
git pull gitee main

注意:在拉取代碼之前吏颖,請確保你在正確的分支上,并且本地倉庫的工作目錄是干凈的恨樟。

管理與維護(hù)

為了保持多個平臺上的倉庫數(shù)據(jù)一致性半醉,你需要定期進(jìn)行同步操作。同時厌杜,當(dāng)在多個平臺上進(jìn)行協(xié)作時奉呛,注意解決可能出現(xiàn)的沖突。要解決沖突可以使用 git merge 工具夯尽,并確保在推送更改之前測試代碼的完整性瞧壮。

關(guān)于更詳細(xì)的 Git 操作指令請參考:

結(jié)語

看完這篇博客,你應(yīng)該已經(jīng)知道怎么在多個平臺上玩轉(zhuǎn) Git 倉庫同步了匙握。同步時別忘了多留個心眼咆槽,還要時不時確認(rèn)下各平臺的數(shù)據(jù)是否都對得上。希望你用 Git 越來越 6圈纺!??????

參考資料

訪問博址 liam-i.github.io 獲取更佳閱讀體驗和最新內(nèi)容麦射。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灯谣,隨后出現(xiàn)的幾起案子潜秋,更是在濱河造成了極大的恐慌,老刑警劉巖胎许,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峻呛,死亡現(xiàn)場離奇詭異,居然都是意外死亡辜窑,警方通過查閱死者的電腦和手機(jī)钩述,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來穆碎,“玉大人摄悯,你說我怎么就攤上這事橄仍⊥鸾ィ” “怎么了屁奏?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長色徘。 經(jīng)常有香客問我葡幸,道長,這世上最難降的妖魔是什么贺氓? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮床蜘,結(jié)果婚禮上辙培,老公的妹妹穿的比我還像新娘。我一直安慰自己邢锯,他們只是感情好扬蕊,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丹擎,像睡著了一般尾抑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒂培,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天再愈,我揣著相機(jī)與錄音,去河邊找鬼护戳。 笑死翎冲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媳荒。 我是一名探鬼主播抗悍,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驹饺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缴渊?” 一聲冷哼從身側(cè)響起赏壹,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衔沼,沒想到半個月后蝌借,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡俐巴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年骨望,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欣舵。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡擎鸠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缘圈,到底是詐尸還是另有隱情劣光,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布糟把,位于F島的核電站绢涡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏遣疯。R本人自食惡果不足惜雄可,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缠犀。 院中可真熱鬧数苫,春花似錦、人聲如沸辨液。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滔迈。三九已至止吁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間燎悍,已是汗流浹背敬惦。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谈山,地道東北人仁热。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抗蠢。 傳聞我的和親對象是個殘疾皇子举哟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容