我们以前在Rails应用程序的vendor/plugins/delayed_job目录下使用本地延迟作业hack。它被安装为一次性事件并检入主应用程序存储库的git中。
现在,我们决定在github上fork delayed_job,并用git子模块替换子目录,如此处所述:
http://doblock.com/articles/using-git-submodules-to-manage-plugins-in-rails
在执行这个操作之前,我只是简单地删除了vendor/plugins/delayed_job,没有将其检入。现在,尽管添加了子模块,在主存储库中运行git status仍然会显示vendor/plugins/delayed_job中的新文件。当一个作为存储库一部分的子目录被删除并且成为一个git子模块时,我们应该如何处理这种情况?我们应该先使用git rm进行删除,还是更彻底地消除它,然后再克隆一个子模块到它的位置?
git submodule add
会创建.gitmodules
文件。您应该在git status
的“要提交的更改”部分中看到它列出。但我仍然对您提到的“vendor/plugins/delayed_job”目录下的“新文件”感到困惑。索引不可能在特定目录下同时有子模块和普通文件;一旦子模块放置在那个目录下,您的git status
就不应该显示任何“新文件”了(尽管可能会有“删除”的文件,因为索引必须清理该目录下的文件)。 - Chris Johnsengit rm --cached -r vendor/plugins/delayed_job/
命令来清理子模块目录下的普通文件条目。如果省略尾随斜杠,则可能需要运行git add vendor/plugins/delayed_job
(此处不能使用尾随斜杠!) 来重新添加子模块的 "gitlink" 条目。如果你已经有了一个克隆的子仓库并且在.gitmodules
中有相应的条目,那么你不需要再次使用git submodule add
命令。 - Chris Johnsen