直接从本地 Linux Git 远程更改 Github 存储库中的目录名称?

use*_*970 10 remote git version-control github mv

这是我的 Git 存储库:

https://github.com/benqzq/ulcwe
Run Code Online (Sandbox Code Playgroud)

它有一个名为目录local,我想将其名称更改为另一个名称(比如,从localxyz)。

通过 GitHub GUI 手动更改它是一场噩梦,因为我必须分别更改每个文件的目录名称(无论您信不信,GitHub 尚未包含“目录重命名”功能)。

安装 Git 后,我​​尝试了以下命令:

git remote https://github.com/benqzq/ulcwe && git mv local xyz && exit
Run Code Online (Sandbox Code Playgroud)

虽然我没有收到任何输入 GitHub 密码的提示,但我确实收到了这个错误:

fatal: Not a git repository (or any parent up to mount point /mnt/c)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
Run Code Online (Sandbox Code Playgroud)

我知道 Git 的重点是下载项目、更改、测试,然后推送到托管提供商(在本例中为 GitHub),但仅更改目录,我希望直接操作。Git甚至有可能吗?

我应该使用另一个程序吗?

Ste*_*itt 28

致命错误消息表明您正在工作的地方不是 git 存储库的克隆。因此,让我们首先克隆 git 存储库:

git clone https://github.com/benqzq/ulcwe.git
Run Code Online (Sandbox Code Playgroud)

然后输入:

cd ulcwe
Run Code Online (Sandbox Code Playgroud)

并重命名目录:

git mv local xyz
Run Code Online (Sandbox Code Playgroud)

为了使更改可共享,您需要提交它:

git commit -m "Rename local to xyz"
Run Code Online (Sandbox Code Playgroud)

现在您可以将其推送到远程 git 存储库:

git push
Run Code Online (Sandbox Code Playgroud)

您将在 GitHub 界面中看到更改。

  • 换句话说,它就像对 Git 存储库中的文件进行的任何其他操作一样。 (14认同)
  • @LightnessRacesinOrbit 到目前为止,提问者似乎一直在使用 Web UI 进行所有更改。 (2认同)

Mat*_*att 5

不,由于 git 的结构方式,无法将其作为直接操作来执行。

git 的工作方式是将整个存储库的副本(包括所有历史记录)存储到每个位置。

Github 或 Bitbucket 或任何其他托管服务提供商本质上只是 git 存储库的另一个副本,顶部有一个漂亮的 Web 界面,在大多数工作流程中被视为真实的中心来源,但是 git 实用程序不知道这一点。

更改作为提交进行跟踪。我猜direct operation,您的意思是一种无需创建提交即可更改文件夹名称的方法。虽然这可以通过重写历史记录来实现,但我不推荐这样做,特别是如果有多个人/机器拥有 git repo 的副本,因为这会导致不一致。

在 git repo 中重命名文件夹的最简单方法是在本地克隆它

git clone [url]
cd [git-folder]
Run Code Online (Sandbox Code Playgroud)

如果您已经拥有该存储库的本地副本,请拉取它以确保您是远程存储库的最新版本

git pull
Run Code Online (Sandbox Code Playgroud)

在本地进行您需要的更改

git mv local xyz
Run Code Online (Sandbox Code Playgroud)

应该由 github 自动添加到暂存区。然后你应该提交并推送这些更改。

git commit -m 'Renamed local to xyz'
git push
Run Code Online (Sandbox Code Playgroud)

这会将更改提交到您的本地存储库,然后将这些更改推送到存储库的远程副本,在本例中为 Github。

  • 不,历史不会*存储*为提交之间的更改,每次提交都是自支持的。每次需要时,都会根据请求重新计算提交之间的更改。 (8认同)
  • _“所有历史记录都下载到每个位置”_ - 不使用 [`git clone --depth`](https://git-scm.com/docs/git-clone#git-clone---depthltdepthgt) (3认同)
  • 为此不需要重写历史记录——GitHub 只需生成一个提交即可。(就像直接在网站上编辑文件时一样。) (2认同)