如何在git中复制目录并跟踪新文件?

4
有没有一种简单的方法在本地仓库中创建文件夹的副本,跟踪完全相同的文件(不关心提交历史或未跟踪的文件)?
该文件夹包含跟踪和未跟踪(但未被忽略)的文件和目录层次结构。基本上我想递归复制已跟踪的结构。除了复制所有内容,然后手动添加相关文件(有很多文件)外,还有其他方法吗?

2
你能否详细说明你的需求?对我来说似乎有点模糊。 - scharette
2
你的目录中是否包含任何未跟踪的文件?如果没有,那么似乎只需要执行 cp dir dir2 && git add dir2 即可。 - 0x5453
1
请注意,在Git中,“历史记录”指的是提交记录,没有其他含义。您无法进行提交而不产生历史记录,也无法修改之前的任何提交记录。但是,您可以将旧的提交复制到新的提交中,然后停止使用旧的提交(这就是Git实现“重写历史记录”的方式)。 - torek
1
@0x5453说得很对,只需复制该文件夹,添加并提交即可。 - evolutionxbox
1
@0x5453 谢谢,明确了问题。该目录包含跟踪和未跟踪的文件(在层次结构中)。它基本上是一个现有的组件,我想创建和开发一个新的不同的组件,同时跟踪旧的和新的。 - Yuri Feldman
5个回答

7

如果您不关心历史记录,可以直接复制目录,然后使用 git add 命令:

$ cp -R old_dir new_dir

$ git add new_dir

$ git commit -m "first revision of new_dir's copied files"

谢谢,澄清了问题 - 有一些未跟踪的文件,我也不想在副本中跟踪它们。想知道是否有比逐个添加相关文件更简单的方法。 - Yuri Feldman

1
基本上,您的问题是如何将有版本控制的文件与没有版本控制的文件分开。本答案假定您已经设置了一个服务器,用于推送您的repo进行备份等操作。将您的dev分支推送到origin服务器:git push origin dev
请注意,只有有版本控制的文件才会发送到服务器。使用Web浏览器查看服务器并找到要复制的文件夹。右键单击要复制的文件夹,选择“下载为zip”。在Windows中创建一个名为new_project的文件夹。从zip文件中复制文件夹到new_project。现在您已经将所有有版本控制的文件复制到了new_project。将新项目添加到git:git add new_project。这将在一个命令中将文件夹new_project、所有文件和子文件夹添加到git中。享受您的新项目。

谢谢!这肯定适用于Github和Bitbucket,虽然我一直在寻找使用git命令而不是服务器接口(可能取决于服务器)的答案,但这是三年来最接近答案的方法! - Yuri Feldman

1
解决方案是使用git clone命令克隆目录。需要注意远程源地址(否则会设置为克隆源)。例如:
# Clone the repository
git clone <existing directory> <new directory>

cd <new directory>

# Set origin url to the same one as old repository
git remote set-url origin `git -C <existing directory> config --get remote.origin.url`

另一个较慢的选项是从远程代码库(github / bitbucket?)克隆,这是@Sergey_S的解决方案 - 这意味着需要重新下载所有内容。


1
你可以进入你打算的目录并再次克隆你的git项目。
$ cd "new_directory"
$ git clone "your_project_git_address"

谢谢,但我需要分别开发和跟踪这两个副本 - 在其中一个提交会干扰另一个。 - Yuri Feldman

1
如果你想在git中拥有两个完全相同但独立的项目,请按照以下命令行操作:
$ mkdir "duplicated_project"
$ cd "your_project_path"
$ sudo cp -R * "duplicated_project_path/"

然后您需要在Git上添加/定义这个复制的项目,这样您就可以跟踪:

使用命令行教程将现有项目添加到GitHub:

GitHub参考文献

或者

您可以在Web UI中复制您的项目:

例如,如果您正在使用Gitlab,则可以复制/导出您的项目,如下所示:

  • 在左侧的设置选项卡中-->选择常规-->展开导出项目-->点击导出

然后按照以下命令行操作:

$ git clone "duplicated/exported_project"

[注意]: 这些方法中没有干扰提交。

看起来我仍然需要手动选择要跟踪的新文件(我错过了什么吗)? 此外,理想情况下,我希望在同一个项目中有两个文件夹,而不是分开的存储库。 - Yuri Feldman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接