这个问题可能很愚蠢,但我一直想知道它。它是关于git存储库的,但我认为它对于其他DVCS的本地存储库是相同的。
让我们说我的项目在启动时就像这样:
那么当你设置它时它是如何工作的?
假设我将Project文件夹移动到其他地方,我是否需要更改任何内容?或者.git文件夹中的所有存储库内容仅相对于Project文件夹而忽略Project上方的整个文件树。
我很确定移动Project无所谓,但我只是想确定。
答案 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 remote set-url [--push] origin user@yourhost:/home/user/newlocation/Project
(origin应该是远程的名称; origin是从远程repo克隆时的默认名称)