【问题标题】:How to move a local git repository to the root folder and preserve history?如何将本地 git 存储库移动到根文件夹并保留历史记录?
【发布时间】:2015-06-03 19:40:29
【问题描述】:

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

当前目录结构:

Solution->
 - Project1
   - .git
 - Project2

所需的目录结构:

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

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

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

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

【问题讨论】:

  • @KyleTrauberman 我不是 git 专家,但如果我按照答案所说的去做,我不会丢失在 Project1 中所做的所有更改吗? (因为目录改变)
  • 使用 git 将实际文件移动到 Solution/Project1/Project1。手动将 .git 文件夹移动到解决方案。手动将文件移回解决方案/项目 1。添加项目 2。享受吧。
  • @iKiWiXz 谢谢。这其实很聪明。直到我自己做了,我才明白发生了什么。

标签: git


【解决方案1】:

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. 移动Solution/Project1/的所有其他内容(.git/.gitignore.gitconfig和新的子文件夹除外)到Solution/Project1/Project1/
  3. cd Polution/project1, git add --all, git commit -m'moved to a subfolder
  4. 移动Solution/Project1的所有内容到Solution。现在项目文件又回到了Solution/Project1/.git 并且git-files 在Solution/
  5. cd Solution/git status。注意不需要的文件。将它们添加到.gitignore
  6. git add --all, git commit -m'added project2'

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'

【讨论】:

  • 谢谢。这是 iKiWiXz 解决方案的详细版本。
  • 添加了第三个解决方案)
【解决方案2】:
  • 将 project1 的内容移动到 project1 的子文件夹中
  • 提交更改
  • 将 project2 移至 project1 文件夹
  • 提交

【讨论】:

  • 这是您在 letz 解决方案之后所拥有的:Project1/Project1 和 Project1/Project2。只需重命名 Project1,您现在就有了 Solution/Project1 和 Solution/Project2。然后移动解决方案,使其位于您想要的位置。
  • 为什么你不能创建你的项目的 Project1 文件夹,而只是将实际的 project1 移动到一个文件夹中?然后他们移动 project2 ?
  • @letz 谢谢,我现在明白了。不过我相信 iKiWiXz 的解决方案更干净。
  • 哦,好像很多人都在解释同一个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多