我已经从别人手中接过了一个项目,我很难让回购再次运行。这可能听起来很基本,但这是我的问题:
所以我克隆了项目,我需要做
git submodule init
git submodule update
它创建了该项目所基于的外部存储库的链接。现在,如果我想保留这段代码的最后一个版本并删除.git(因为我们很快将它发布到公共场所并且不想分享我们的git脚印)并且仍然有“git submodule”工作,我该怎么办需要做?除了.git之外,在项目文件夹中还有一个名为“.gitmodules”的文件,其中包含指向外部存储库的链接。但是当我“rm -rf .git”并执行一个新的git init来初始化一个新的git副本时,“git submodule init”和“git submodule update”不会做任何事情。我应该做些什么来在.git和我保存在文件夹中的“.gitmodules”文件之间建立链接吗?
答案 0 :(得分:1)
如果删除.git
目录并使用git init
创建新目录,则需要运行git submodule add
以重新注册子模块。例如,这里我们有一个包含一些子模块的存储库:
bash-4.3$ git submodule
460317a37795e0751ecc788e571a11fc1a908079 bar (heads/master)
460317a37795e0751ecc788e571a11fc1a908079 foo (heads/master)
如果我们删除了我们的git历史记录并重新使用了存储库:
bash-4.3$ rm -rf .git
bash-4.3$ git init
Initialized empty Git repository in /home/lars/tmp/repo/.git/
此时,git看不到子模块:
bash-4.3$ git submodule
bash-4.3$
尽管他们还在那里:
bash-4.3$ ls
bar foo
我们可以使用git submodule add
重新注册它们:
bash-4.3$ git submodule add git@myserver:path/to/repo/foo foo
Adding existing repo at 'foo' to the index
bash-4.3$ git submodule add git@myserver:path/to/repo/bar bar
Adding existing repo at 'bar' to the index
他们回来了:
bash-4.3$ git submodule
460317a37795e0751ecc788e571a11fc1a908079 bar (heads/master)
460317a37795e0751ecc788e571a11fc1a908079 foo (heads/master)
答案 1 :(得分:0)
要删除/删除.git
目录,只需删除.git
目录并重新启动。
(删除.git文件夹后,子模块的命令将无效,因为.gitmodules
与.git
文件夹一起被删除
现在你将实现任务1:擦除git目录
要将子模块添加到存储库,请使用命令git submodule add
示例:git submodule add https://github.com/chaconinc/DbConnector
如果此时运行git status
,您会注意到一些事情。
首先,您应该注意到新的.gitmodules
文件。这是一个配置文件,用于存储项目URL和您已将其拉入的本地子目录之间的映射。
(如果你有多个子模块,你将在这个文件中有多个条目。重要的是要注意这个文件是由你的其他文件控制的版本,比如.gitignore文件。它的推送和拉动与其余的你的项目。这就是克隆这个项目的其他人知道从哪里获得子模块项目。)
现在,您将完成任务2:像以前一样使用子模块。