2017-07-31 69 views
0

近3年來,我們一直在開發基於ssh://[email protected]:40000/myproject.git的git回購協議。現在我必須將文件傳輸到我的客戶端git倉庫,這是ssh://[email protected]:7999/w3/myproject.git在回購之間切換

然後開發人員需要開始工作轉移回購這是bitbucket之一。

所以我有兩個問題,什麼是在回購之間轉移代碼的最佳方式?

那麼開發人員開始處理新回購的最佳方式是什麼?是否有可能只是改變遠程網址?該項目是巨大的,我很樂意避免開發人員花一整天的時間來構建項目,配置等。

謝謝。

回答

1

是的,可以編輯遠程URL。它取決於你的git-client,但是在一個沒有GUI的git層上,只要看看.git/config文件,你會發現所有remotes的定義。

[core] 
    bare = false 
    (.....) 
[user] 
    name = you 
    email = [email protected] 
[remote "origin"]        #<---- here ya go '1 
    url = ssh://[email protected]:40000/myproject.git #<--- here ya go '2 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

所以,你可以改變它,拉鍊的.git,把它交給其他開發,他已經準備好去。呸。不要這樣做,除非你在空白處。

這是因爲沒有太多的意義,所有手動。 Git可以輕鬆處理多個遙控器,並且您有push可以爲您初始化新的遠程回購,並且clone可以設置開發人員工作..可能對您(至少暫時)保持更便利兩個遙控器均已配置。

假設你已經傳統origin只需添加一個新的名稱新一:

git remote add newrepo ssh://[email protected]:7999/w3/myproject.git 

後..只是推

git push newrepo master 

git push --all 
git push --tags 
... etc 

之後,新回購將包含來自源頭的「一切」(=取決於你所推薦的內容)一個,新的開發者可以簡單地從這個新的開發者clone/pull,忽略舊的。

由於您正在進行正常推送,新回購也將獲得完整歷史記錄。如果你不想這樣做,你需要先修剪它(壓扁等)。

+0

如果我不能'git remote add newrepo',因爲它已經存在並且有一些舊的代碼在裏面。 – DarthVader

+0

@DarthVader:你的新版本庫包含一些舊的代碼?有點奇特,不是嗎?無論如何,假設你想刪除舊的代碼並用最新的代碼替換它 - 首先清理新的repo:刪除除master之外的所有分支(因爲你可能無法刪除'master' beucase,可能它是默認的分支在服務器的裸回購),然後強制推送一個孤立的空提交到'master'分支。之後,您的新回購將完全是空的,並準備好接收從您的實際源回購推送的內容。 – quetzalcoatl

0

由於通常git克隆整個存儲庫,除克隆之外,您不需要做太多的工作。
開發人員只需要改變他們'起源'的URL或者以不同的名字克隆新的URL,並且記住要推到那裏。
就我個人而言,我會刪除遠程原點,然後添加遠程原點。

+0

非常感謝。和什麼將語法?我現在可以試試看。 – DarthVader

0

$ git remote add <new_origin_name> <new_origin_url>

是命令。在這裏,new_origin_name可以是除了給舊的遠程倉庫以外的其他名稱。然後強制推向新的回購:

$ git push --force <new_origin_name> 

如果--force太強,可以使用--force-with-lease。您的其他開發人員需要完全相同(除了使用--force選項當然!)。

對於Bitbucket(在Windows/Mac上),對於每個人來說,使用Atlassian軟件sourcetree可能不是一個好主意,它可以幫助人們在GUI上完成所有這些工作。