2011-10-31 170 views
59

這個問題可能是愚蠢的,但我一直在想它。這是關於git存儲庫,但我認爲對於其他DVCS的本地存儲庫是一樣的。搬家git倉庫

比方說我的項目是這樣的,當它開始:

  • 項目
    • git的
    • 所有其他文件夾中的項目

所以這是怎麼它會工作,當你設置它的權利?

可以說我把項目文件夾移到其他地方,我是否需要改變任何東西?或者.git文件夾中的所有存儲庫內容僅與Project文件夾相關,而忽略了Project上的整個文件樹。

我很確定移動項目並不重要,但我只是想確保。

+0

只要你移動.git文件夾你就OK –

回答

22

是的,.git中的所有內容都是相對的。如果您已將存儲庫作爲另一個存儲庫的命名遠程名稱添加,則必須更改該存儲庫中的遠程URL。

+12

不,這是錯誤的。請參閱下面有關子模塊的答案。 – erikkallen

+1

@erikkallen查看我對該答案的評論,解釋我無法驗證這些語句。 (如果我可以深入瞭解發生了什麼,我將相應地編輯我的答案。) –

6

不,你不需要改變任何東西。也就是說

  • 假設沒有腳本設置GIT_DIR,GIT_WORKTREE或GIT_INDEX直接(不太可能)
  • 你有指向該副本

    • 沒有外部倉庫,如果你這樣做,你必須通過使用

      git remote set-url [--push] origin [email protected]:/home/user/newlocation/Project 
      
  • 012重新指向他們

(原點應該是遠程的名稱;起源是從遠程回購點克隆時的默認名稱)

+0

這個!當你只使用'remote set-url'時,就不會出現設置本地分支上游的問題。 –

61

我發現子模塊在git中不是相對的。

所以,如果你想移動包含子模塊的一個項目,你必須編輯.git文件中的子模塊,以及輔助模塊配置文件中的「worktree」屬性,它被保存在父母的.git/modules/MODULENAME/config文件。

+3

我還必須編輯'MODULENAME/.git',其中包含'gitdir'的鍵值對' –

+7

這應該是接受的答案。 – erikkallen

+0

我實際上已經將這些值更改爲相對路徑,使用../ ..(但是需要多少)返回到項目的根目錄。 – Uilleann

1

你可以將git目錄從一臺機器移動到另一臺機器,或者說,你想遷移你的項目文件夾。

所有關於原點的信息都存儲在'.git'文件夾中,該文件夾在初始化系統目錄下的git存儲庫時創建。

程序

  1. :將項目文件夾到其他位置。
  2. :如果項目文件夾正在移動到新機器上,則創建相應的SSH密鑰對。
  3. :讓Git使用的是誰:混帳配置--global user.email 「your_git_email_id @ youremail」
8

顯示當前的遠程(這是當然的可選步驟):

$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
Tracked remote branches 
master 

我們需要做的是刪除當前的原點並添加新的原點:

$ git remote rm origin 
$ git remote add origin [email protected]:project.git 
$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
error: refs/remotes/origin/HEAD points nowhere! 
New remote branches (next fetch will store in remotes/origin) 
master 

不要擔心最後一條命令顯示的錯誤。從源頭上拉頭將修復它:

$ git pull 
From [email protected]:project.git 
* [new branch]  master  -> origin/master 
Already up-to-date. 
$ git remote show origin 
* remote origin 
URL: [email protected]:project.git 
Remote branch(es) merged with 'git pull' while on branch master 
master 
Tracked remote branches 
master 

我仍然使用Git新鮮,所以也許THRE是一個更好的方式來做到這一點,但是這爲我工作。

+1

偉大的建議。但是,本地分支不會將其上游設置爲新「原點」的遠程跟蹤分支。但是,有消息:「當前分支沒有跟蹤信息。 請指定你想合併哪個分支.'和一個建議:'如果你想爲這個分支設置跟蹤信息,你可以這樣做: git branch --set-upstream-to = origin/ master' –