[英]How to keep public and private versions of a git repo in sync?
我正在Github上發布一個開源的Rails應用程序(可能是麻省理工學院的許可證)。 我還想維護項目的私有分支/分支,我們將將其用作付費服務的一部分。
在這種情況下組織回購的最佳方法是什么? 而且,當我有更新應該同時進行時,如何讓項目保持同步?
最簡單的解決方案是在您的“私有”存儲庫中擁有私有分支 ,即只是不將其推送到公共存儲庫的分支。
為此,您可能需要指定要在config中推送到公共存儲庫的所有分支(而不是使用globbing鏡像refspec +refs/*:refs/*
),或者仔細推送要發布的分支並依賴於Git行為推送匹配分支(遠程端存在的分支)將“push.default”設置為當前默認值“匹配”。
如果您偶然推送您的私有分支,您可以使用“git push < remote >:refs / heads / < private-branch >”將其刪除在遠程存儲庫中(除非它被配置為禁止此)(要記住這一點:push empty遠程分支的價值)。 您可以使用遠程端的鈎子防止意外推送您的私有分支,請參閱contrib / examples中的例如update-paranoid示例鈎子。
旁注: Junio C Hamano,git維護者,推送公共git存儲庫只指定一組分支:'maint','master','next','pu'(建議更新)和'html','man','去做'; 他沒有發表短暫的,經常變化的特征分支。
working repository ----> private repository (bare) ----> public repository \------ private -------/ \------- protected ------------/ \------- public -----/
“ 工作存儲庫 ”是具有您提交的工作區域的存儲庫,您可以在其中提取更改並解決沖突; 您在哪里工作。 假設它包含以下分支:“公共”包含可以發布到世界的更改,“私有”,您希望不與他人共享或僅與選定的人員共享,也許某些功能分支如“票證 - 234'或'add-frobnicator',即使對於選定的組也看不到。 此存儲庫是非裸的,因為它未發布。
它將具有類似於以下配置的推送到“私有”存儲庫。 請注意,“匹配分支”行為在此處明確設置,請參閱git-pull手冊頁:
[remote "private"]
url = user@example.com:/srv/private/git/repo.git
push = +:
“ 私有存儲庫 ”是僅供選定人員使用的公共裸存儲庫,例如,它僅可通過SSH獲取。 它只有准備就緒的分支,即“公共”和“私人”分支; 這些分支在創建“私有”存儲庫時存在,或者從“工作”存儲庫中明確地推送(“git push private <branch> ”)。 從“工作”存儲庫推送僅推送(傳輸)匹配的分支,即僅“公共”和“私有”分支。
“私人倉庫”有post-update
或post-receive
其推動“公共”分支只能以“公共庫”(見下文),如果它被推到它(當然,它可以無條件地推)掛鈎集。
“ 公共存儲庫 ”是可供所有人使用的公共裸存儲庫,例如它托管在GitHub和/或Gitorious和/或repo.or.cz上,或者可能通過git://
protocol使用git-daemon提供。 它只包含'public'分支,它使用update
或pre-receive
來接受分支的whilelist(這里只接受'public'分支),或者拒絕分支的黑名單(在這個例子中推送/創建'private'分支會被拒絕)。 推送到“私有”存儲庫時會自動更新。
根據您的需要,此設置可能過於復雜; 在您的情況下,可能不需要“私有”存儲庫。 在這種情況下,“工作存儲庫”中用於直接推送到“公共存儲庫”的配置如下所示:
[repository "public"]
url = ssh://example.com/srv/git/repo.git
push = refs/heads/public:refs/heads/public
我希望這個例子有所幫助; 但請閱讀文檔,不要盲目使用。
如果關於“付費服務的一部分”的代碼是獨立的(即“在另一個目錄中”)而不是代表推送到公共存儲庫的“開源Rails應用程序”的代碼,您可以:
這樣,您正在使用所有系統(公共Rails應用程序+私人支付系統),但只將公共部分推送到GitHub,您可以將所有系統(私有+公共)推送到另一個私有存儲庫(在備份計算機上)例如)。
如果私人代碼與公共代碼混在一起......那么請參閱Talljoe的回答或JakubNarębski的回答 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.