【问题标题】:Move .git repo to parent directory [duplicate]将 .git repo 移动到父目录 [重复]
【发布时间】:2015-08-18 20:53:46
【问题描述】:

我有一个名为“www”的子目录,它是一个 repo:

site
|-- www/
|    |-- .git/
|    |-- index.html
|-- design/
|    |-- images.jpg

我想把repo改成父目录,这样repo结构就和原来的文件结构镜像如下:

site
|-- .git/
|-- www/
|    |-- index.html
|-- design/
|    |-- images.jpg

这可以吗?然后将更改推送到 Gitlab 是否有影响?

【问题讨论】:

  • 我认为您可以将 .git/ 目录向上移动一个目录(或两个)。这会有点贵,而且第一次提交会很有趣,但它应该可以工作。 (基于这个问题的第二个答案stackoverflow.com/questions/1918111/…
  • @mrcheshire 使用 git mv 给我一个致命错误,说目标目录“在存储库之外”。
  • 只需使用mv。然后git add -Agit commit -a
  • @maackle 这会丢失所有修订历史记录,看起来文件已被删除
  • 在当前状态下,design 是否处于修订控制之下(即,.git 的对等体?

标签: git github gitlab


【解决方案1】:
  1. 在您的存储库中创建一个www 目录。
  2. git mv 该目录的 HTML 文件。可选择提交此步骤。
  3. mv 将设计目录放入您的存储库,git add .
  4. 提交。
  5. 重命名/移动整个存储库。

【讨论】:

  • 完美运行。也是这么简单的解决方案!
  • 第 2 步中的 git mv。这将 - 暂时/直到第 5 步完成 - 将您的文件移动到文件系统中的不同位置,当这些文件服务于任何类型的实时目的 - 例如作为 Web 服务器的内容。 The solution given by @user5241051 没有这个缺陷。
  • 存储库用于开发。几乎按照定义,工作树的内容将不断变化。至少可以说,不建议将其用作实时网络服务器内容。
  • 虽然确实如此,但 git 确实 被用于other purposes
  • 对于执行此 Git repo 移动的人,我有一个问题。如果我执行这些步骤,然后尝试重置(或签出)在此移动之前发生的提交,会发生什么?会不会有什么问题?例如,Git 存储库会以某种方式将 back 移动到其原始目录吗?
【解决方案2】:

以下说明将起作用。

cd www
mv .git ../
git add www
git commit -a -m "Change root directory of project"
git add design/*
git commit -m "Start tracking design folder"

这将保留您的历史记录。

【讨论】:

  • 执行此操作时,您会丢失文件的所有历史记录。
  • @NAIT 如果我这样做git log,历史记录会被保留,但在 GitHub 上历史记录会被删除。
  • 这应该是公认的答案。
  • 话虽如此,另一种重写历史的方法,好像父目录一直是回购的一部分,可以找到here。不过,推动更改可能需要--force
  • 您能解释一下这是如何工作的吗?这似乎违反直觉。这样做我意识到 git 进行了重命名,但幕后发生了什么?
猜你喜欢
  • 2021-09-19
  • 2010-10-11
  • 1970-01-01
  • 2012-11-08
  • 2014-04-23
  • 1970-01-01
  • 2017-06-03
  • 2013-02-01
  • 2018-06-30
相关资源
最近更新 更多