移动git存储库

时间:2011-10-31 00:51:55

标签: git repository

这个问题可能很愚蠢,但我一直想知道它。它是关于git存储库的,但我认为它对于其他DVCS的本地存储库是相同的。

让我们说我的项目在启动时就像这样:

  • 项目
    • 的.git
    • 项目中的所有其他文件夹

那么当你设置它时它是如何工作的?

假设我将Project文件夹移动到其他地方,我是否需要更改任何内容?或者.git文件夹中的所有存储库内容仅相对于Project文件夹而忽略Project上方的整个文件树。

我很确定移动Project无所谓,但我只是想确定。

4 个答案:

答案 0 :(得分:62)

我发现子模块在git中不是相对的。

因此,如果要移动包含子模块的项目,则必须编辑子模块中的.git文件,以及子模块配置文件中的“worktree”属性,该文件存储在子模块中。 parent的.git/modules/MODULENAME/config文件。

答案 1 :(得分:23)

是的,.git中的所有内容都是相对的。如果您已将存储库作为命名远程添加到另一个存储库,则必须更改该另一个存储库中的远程URL。

答案 2 :(得分:10)

显示当前遥控器(当然这是可选步骤):

$ git remote show origin
* remote origin
URL: git@oldserver: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 git@newserver:project.git
$ git remote show origin
* remote origin
URL: git@newserver: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 git@newserver:project.git
* [new branch]      master     -> origin/master
Already up-to-date.
$ git remote show origin
* remote origin
URL: git@newserver:project.git
Remote branch(es) merged with 'git pull' while on branch master
master
Tracked remote branches
master

我仍然对Git很新鲜,所以也许这是一个更好的方法,但这对我有用。

答案 3 :(得分:6)

不,你不需要改变任何其他东西。那是

  • 假设没有脚本直接设置GIT_DIR,GIT_WORKTREE或GIT_INDEX(不太可能)
  • 您没有指向此副本的外部存储库

    • 如果你这样做,你必须重命名使用

      git remote set-url [--push] origin user@yourhost:/home/user/newlocation/Project
      

(origin应该是远程的名称; origin是从远程repo克隆时的默认名称)