下面是我的情況:我是 GitHub 上一個開源庫的維護者,作為我作業的一部分,我還從事各種閉源(非基于 GitHub)的 git-repositories。許多這些閉源 git 存盤庫作為子模塊鏈接到我在 GitHub 上的開源庫。
正因為如此,我經常會在其中一個閉源存盤庫上作業,并且我會在我的開源庫中遇到一些我想更改的東西。我將在子模塊中進行更改并構建和測驗它,然后我想提交它并將更改推送到 GitHub ......直到大約四個月前它作業得很好——但最近 GitHub 加強了他們的安全性策略,因此他們不再接受來自https-based 存盤庫簽出的推送,僅接受來自 -based 的推送ssh。
但是,.gitmodules我的閉源存盤庫中的檔案都配置為通過 URL 檢出開源子模塊https(這樣我的同事就可以git submodule update --init --recursive使用子模塊而無需知道我的 GitHub 登錄資訊),這意味著 GitHub 不會不要讓我推動我的改變。
為清楚起見,這是我的一個檔案的相關摘錄.gitmodules:
[submodule "submodules/muscle"]
path = submodules/muscle
url = https://github.com/jfriesne/muscle.git
我的解決方法是ssh在我的機器上單獨(基于 - )簽出開源庫,并手動將任何本地更改的檔案復制到那里,從那里執行提交和推送,然后回傳到我的子模塊并執行 agit stash后跟 a git pull origin master。這可行,但手動復制檔案有點乏味且容易出錯。我想念能夠cd submodules/muscle ; git commit -mblah ; git push像過去一樣做一個簡單的 .
我的問題是,有沒有辦法向 GitHub 驗證自己的身份,以便我可以https直接將更改推送到 -checked-out 子模塊?
uj5u.com熱心網友回復:
你仍然可以通過 https 推送,你只需要使用 GitHub “令牌”(它會過期,這意味著你必須不時重新生成它們并更新它們,這很痛苦)。
即使 URL 顯示 ,要通過 ssh 訪問 GitHub https://github.com/<path>,請考慮使用 Git 的insteadOf功能。這個特殊的功能配置起來有點混亂,但是一旦完成就可以直接使用:
git config --global url.ssh://[email protected]/jfriesne/muscle.git.insteadOf https://github.com/jfriesne/muscle.git
配置選項的值是將出現在某些.git/config檔案條目中的 URL。配置選項的名稱以 開頭和結尾,并且具有通常的點,但在兩個點之間插入替換URL。remote.remote.urlurlinsteadOf
(如果您的 ssh 配置github.com指定您可以從設定User git中省略。git config 檔案中的措辭有點令人困惑,因為它描述了完全通用的形式,您只需替換 URL 的前綴,保留其余部分:您可以例如,使用它使所有訪問都使用 ssh。)git@url.replacement.insteadOf = originalgithub.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/520046.html
