问题
This question may be dumb, but I've been wondering it for a while. It's about git repositories, but I assume it's the same for local repositories for other DVCS'.
Lets say my project is like this when it starts:
- Project
- .git
- all the other folders in the project
So that's how it would work when you set it up right?
Lets say I move the Project folder somewhere else, would I have to change anything? Or is all the repository stuff in the .git folder relative only to the Project folder ignoring the whole file tree above Project.
I'm pretty sure moving Project wouldn't matter but I just wanted to make sure.
回答1:
Yes, everything in .git
is relative. If you have added the repository as a named remote to another repository, you would have to change the remote URL in that other repository, though.
回答2:
I've found that submodules are not relative in git.
So, if you want to move a project that contains submodules, you have to edit the .git
file in the submodule, as well as the "worktree" attribute in the submodule config file, which is stored in the parent's .git/modules/MODULENAME/config
file.
回答3:
Show current remote (this is optional step of course):
$ 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
What we need to do is to remove current origin and add the new one:
$ 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
Don’t worry about the error shown by the last command. The first pull from the origin will fix it:
$ 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
I’m still fresh with Git so maybe thre’s a better way to do it but this worked for me.
回答4:
No, you wouldn't have to change anything else. That is
- assuming no scripts set GIT_DIR, GIT_WORKTREE or GIT_INDEX directly (unlikely)
you have no external repositories pointing to this copy
if you do you'll have to repoint them by using
git remote set-url [--push] origin user@yourhost:/home/user/newlocation/Project
(origin should be the name of the remote; origin is the default name when cloning from a remote repo)
回答5:
You can move the git directory from one machine to another or say, you want to migrate your project folder.
All the information about origin is stored in '.git' folder, which is created when you initialize a git repository under a directory on your system.
Procedure
- : Move the project folder to other location.
- : If the project folder is being moved to a new machine, then create corresponding SSH key-pair.
- : Tell git who you are using: git config --global user.email "your_git_email_id@youremail"
来源:https://stackoverflow.com/questions/7949036/moving-a-git-repository