搬家git仓库

问题描述:

这个问题可能是愚蠢的,但我一直在想它。这是关于git存储库,但我认为对于其他DVCS的本地存储库是一样的。搬家git仓库

比方说我的项目是这样的,当它开始:

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

所以这是怎么它会工作,当你设置它的权利?

可以说我把项目文件夹移到其他地方,我是否需要改变任何东西?或者.git文件夹中的所有存储库内容仅与Project文件夹相关,而忽略了Project上的整个文件树。

我很确定移动项目并不重要,但我只是想确保。

+0

只要你移动.git文件夹你就OK –

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

+12

不,这是错误的。请参阅下面有关子模块的答案。 – erikkallen

+1

@erikkallen查看我对该答案的评论,解释我无法验证这些语句。 (如果我可以深入了解发生了什么,我将相应地编辑我的答案。) –

不,你不需要改变任何东西。也就是说

  • 假设没有脚本设置GIT_DIR,GIT_WORKTREE或GIT_INDEX直接(不太可能)
  • 你有指向该副本

    • 没有外部仓库,如果你这样做,你必须通过使用

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

(原点应该是远程的名称;起源是从远程回购点克隆时的默认名称)

+0

这个!当你只使用'remote set-url'时,就不会出现设置本地分支上游的问题。 –

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

所以,如果你想移动包含子模块的一个项目,你必须编辑.git文件中的子模块,以及辅助模块配置文件中的“worktree”属性,它被保存在父母的.git/modules/MODULENAME/config文件。

+3

我还必须编辑'MODULENAME/.git',其中包含'gitdir'的键值对' –

+7

这应该是接受的答案。 – erikkallen

+0

我实际上已经将这些值更改为相对路径,使用../ ..(但是需要多少)返回到项目的根目录。 – Uilleann

你可以将git目录从一台机器移动到另一台机器,或者说,你想迁移你的项目文件夹。

所有关于原点的信息都存储在'.git'文件夹中,该文件夹在初始化系统目录下的git存储库时创建。

程序

  1. :将项目文件夹到其他位置。
  2. :如果项目文件夹正在移动到新机器上,则创建相应的SSH密钥对。
  3. :让Git使用的是谁:混帐配置--global user.email “your_git_email_id @ youremail”

显示当前的远程(这是当然的可选步骤):

$ 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' –