如何将本地git存储库移动到根文件夹并保留历史记录?

时间:2015-06-03 19:40:29

标签: git

我有一个位于项目中的本地git存储库。我已经决定某些代码需要在另一个项目中,但我只需要一个git存储库。

当前目录结构:

Solution->
 - Project1
   - .git
 - Project2

所需的目录结构:

Solution->
 - .git (tracks both projects)
 - Project1
 - Project2

如何将.git移动到根文件夹(Solution),以便它可以开始同时监视Project1和Project2而不会丢失修改/提交的跟踪?

注意:我并不关心保留将要移动到Project2文件夹的文件的历史记录。

注意:这不是(this question)的重复,因为我没有移动git存储库及其全部内容。我只想将git存储库移动到根文件夹。

2 个答案:

答案 0 :(得分:3)

git add -u解决方案

最优雅,需要6个命令。

cd Solution/
#dot means "move it here"
mv Project1/.git .

#make git add deleted files
git add -u

#make it recognize them as moved
git add Project1/

现在git status应该显示"重命名..."

git commit -m'moved to a subfolder'

现在检查不需要的文件并更新.gitignore

#add the project2:
git add --all
git commit -m'added project2'

子文件夹解决方案

  1. Solution/Project1/中创建一个名称相同的子文件夹:Solution/Project1/Project1/
  2. 移动 .git/的所有其他内容(.gitignore.gitconfigSolution/Project1/和新子文件夹除外)至Solution/Project1/Project1/
  3. cd Polution/project1git add --allgit commit -m'moved to a subfolder
  4. 移动 Solution/Project1的所有内容为Solution。现在,项目文件又回到Solution/Project1/.git,git文件位于Solution/
  5. cd Solution/git status。留意不需要的文件。将它们添加到.gitignore
  6. git add --allgit commit -m'added project2'
  7. git mv解决方案

    cd Solution/Project1/
    mkdir Project1/
    
    #Now move all your files with git mv
    git mv foo.txt Project1/
    git mv bar.js Project1/
    git mv fizz/ Project1/
    ....
    
    git commit -m'moved files to a subfolder'
    cd ../
    

    现在将所有文件从Solution/Project1/移至Solution。这可能是使用mv命令完成的,但我没有注意到确切的语法。

    # this should work now
    git status
    # fix .gitignore if necessary
    git add --all
    git commit -m'added project2'
    

答案 1 :(得分:1)

  • 将project1的内容移动到project1的子文件夹
  • 提交更改
  • 将project2移动到project1文件夹
  • 提交