gpt4 book ai didi

git - 重组 git repo

转载 作者:行者123 更新时间:2023-12-02 03:30:06 26 4
gpt4 key购买 nike

我有一个像这样的 git repo 结构-

main-repo
-file1
-file2

我想把它转换成类似的东西-

main-repo
-javascript
-file1
-file2

然后用另一种语言添加另一个仓库

main-repo
-javascript
-file1
-file2
-python
-file1
-file2

鉴于我已经有多个提交并且测试在 travis.yml 中配置为在推送到 master 时运行,该怎么做。

最佳答案

I have a git repo structure like this- … I want to convert it to something like- …

在存储库中移动文件没有错。然而,即使 Git 可以自动检测文件移动(因为一些会消失而另一些会出现,具有完全相同的内容),有一个专门的命令可以这样做:

git mv <source> <destination>

文件将自动移动,这将显示在 git status 的报告中。因此,您需要提交记录。

这样做总是一个好主意,因为如果不是真的需要,人们总是希望避免重命名/移动 git 存储库中的文件。这是因为它打破了这些给定文件的历史连续性并使它们难以追溯。

每个提交都应该独立于其他提交,即使每个提交都引用前一个(或 merge 时的前一个)。它们基本上是一个完全限定文件名的列表,每个文件名都指向它们各自的内容,这使您能够轻松地比较(使用 git diff)图中任何两个提交。

这真的很强大,但缺点是 git 依赖文件名来知道比较什么。如果在一次提交和下一次提交之间只有少数名称发生变化,git 会猜测它们实际上是哪些。但是如果你同时引入文件更改和名称重命名,或者如果你重命名一个文件并创建另一个具有相同内容的文件,它就会混淆。

通过使用 git mv,您可以让 Git 有机会存储所有需要的信息以帮助它完成此任务。此外,在其他一些工作方式不同的 SCM 中,这可能是强制性的。

and then later on add another repo in another language like

这没什么特别的。只需像开始时那样添加额外的内容(不过不要忘记提交),但请注意 Git 无法处理空目录。所以你需要在你的“python”目录中添加至少一个文件。这也意味着一旦您删除了给定目录中的最后一个文件,该目录本身也会在下次 checkout 时自动消失。不要对此感到惊讶。

这是因为,如前所述,Git 只考虑文件(即使它仍然能够处理符号链接(symbolic link)和特殊文件)并通过维护完全限定的文件名(例如“/目录名/基名”)。因此它无法处理末尾没有叶子的分支。

此外,如果您的“javascript”和“python”目录没有任何关系(没有给定独特项目的部分),您最好将它们变成多个独立的 git 存储库。请记住,您始终可以使用 git init 初始化一个新的存储库,即使其中已经有一些东西。

最后,当您想要在更大的存储库中创建一个存储库时,例如公开共享小存储库同时保留一些关于它的附加信息,或者在处理一个大项目时其中一个存储库它的库本身就是一个项目,你会想检查 git submodule ,但不是今天。 :)

关于git - 重组 git repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52098359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com