相关疑难解决方法(0)

filter-branch --tree-filter之后从git repo中删除refs/original/heads/master?

我遇到了与此处提出的问题相同的问题:根目录中的新git存储库包含子目录中的存在存储库

我在这里听到了这个答案:根目录中的新git存储库包含子目录中的存在存储库

现在,gitk --all显示两个历史:一个在当前达到高潮master,一个命名original/refs/heads/master.

我不知道这第二个历史是什么,或者如何从回购中删除它.我的存储库中不需要两个历史记录.

我怎么摆脱它?

重现自己:

mkdir -p project-root/path/to/module
cd project-root/path/to/module
mkdir dir1 dir2 dir3 
for dir in * ; do touch $dir/source-file-$dir.py ; done
git init
git add .
git commit -m 'Initial commit'
Run Code Online (Sandbox Code Playgroud)

现在我们有原始海报的问题.让我们使用上面链接的答案将git repo的根目录移动到project-root:

git filter-branch --tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 dir3 path/to/module' HEAD
rm -rf path
cd ../../../ # Now PWD is project-root
mv path/to/module/.git .
git reset --hard
Run Code Online (Sandbox Code Playgroud)

现在,看看我目前的问题:

gitk …
Run Code Online (Sandbox Code Playgroud)

git git-rewrite-history git-plumbing

166
推荐指数
3
解决办法
4万
查看次数

回顾性地将git文件夹转换为子模块?

通常情况下,您正在编写某种类型的项目,过了一段时间后,很明显项目的某些组件实际上可用作独立组件(可能是库).如果您从早期开始就有这个想法,那么大部分代码都存在于自己的文件夹中.

有没有办法将git项目的子目录之一转换为子模块?理想情况下会发生这样的情况,即该目录中的所有代码都从父项目中删除,并且子模块项目被添加到其中,具有所有适当的历史记录,并且所有父项目提交都指向正确的子模块提交.

git git-submodules

103
推荐指数
5
解决办法
2万
查看次数

如何在git存储库中创建一个git子模块的现有目录

我对git-submodules很困惑.

基本上我的问题是我不能让git明白这~/main-project/submodule是一个子模块.


我对git子模块有很好的经验:
在我的dotfiles存储库中我创建了.gitmodules文件,~/dotfiles-repo并添加了路径和URL.从那时起,如果我对子模块中的文件进行更改并运行git status,我会得到类似的结果:.vim/bundle/auto-complete (new commits) # in red

我创建了.gitmodules文件~/main-project但是:

  • 如果我更改~/main-project/submodule,甚至推的变化,我没有得到这样一个类似的反应<submodule> (new commits) # in red中运行时git status~/main-project.我只是得到了在这些目录中所做的更改
  • 当我点击github这些目录的文件夹链接时,它并没有指示我自己的存储库,但我留在同一个存储库中.

    1. 也许我错过了重点.子模块的主要特征是什么?
    2. 为什么git理解dotfiles repo中的子模块而不是我的其他repo中的子模块?
    3. 是因为我已经告诉git将文件添加~/main-project/submodule到索引中吗?

我读过这个问题导致我得到了这个答案,但我不确定是否需要git-subtree.我不想做那些可能难以改变的事情.

编辑:这个建议的重复解决方案也不起作用,我收到了一个错误Updates were rejected because the remote contains work that you do not have locally.似乎@GabLeRoux几乎告诉我要推 …

git version-control git-submodules

30
推荐指数
3
解决办法
2万
查看次数

使git跟踪自动生成的文件但忽略diff

我有源代码(大部分的存储库*.php,*.js)和文档文件(主要是*.md,*.html,*.svg)自动从注释生成.所有文档都位于./doc存储库中的单独子目录()中.

一方面,我希望通过跟踪文档,git如果它发生变化,我希望它被提交/推送到服务器,因为它有一个很好的可浏览和最新文档很不方便由github显示.

另一方面,在输出git diff命令期间看到自动生成的文件是非常烦人的.例如,如果在两次提交之间更改了一行源代码,则git diff不仅会输出此单行,而且还会输出所有自动生成的文档,因为整个自动生成的文档已更改.

有没有办法告诉git跟踪文档但diff默认情况下将其排除?如果git将所有文档文件视为blob,我也会对我好.然后,至少diff只会声称文件已更改,但不会显示所有文档行每行.

git code-generation auto-generate gitignore

12
推荐指数
2
解决办法
2258
查看次数

Git:将子目录转换为子模块

我已经成功地使用命令(例如这两个示例中概述的方法)将子模块转换为子目录:

Submodule-> SUBDIR

Subdir->子模块

挑战是在目录上成功实现此目的,通过每次转换保留其历史记录.
上面列出的这两种方法在一个简单的实验存储库上运行良好,但不处理更复杂的存储库.例如,具有任意提交模式的repo.

执行时问题会暴露出来

git filter-branch --subdirectory-filter <lib-directory> -- --all

尝试将目录(以前是子模块)转换为子模块时.如果我理解正确的话.这是扔:

Rewrite c95281d27e4602e9af50146eefcf7c28f5bb4f35 
        (2/11)a989b207d3757f9803fd50fa2d77908a4dc1330e
fatal: failed to unpack tree object 
       c95281d27e4602e9af50146eefcf7c28f5bb4f35:lib/test_submodule
Could not initialize the index`
Run Code Online (Sandbox Code Playgroud)

其中绝对没有类似的结果在线.
据认为,这是由于对INDEX中子模块的重复引用而发生的,因此当转换子模块时,会发生上述错误.

有没有办法执行一个filter-branch允许避免这些早期的子模块引用?

编辑:我再次回来看这个问题,我仍然没有找到解决方法.使用Subdir-> Submodule方法git filter-branch可以正常用于普通目录; 但碰到子模块时会崩溃.git中此部分发生的崩溃:

https://github.com/github/git-msysgit/blob/master/git-filter-branch.sh#L300

但是我对此无法理解.

git git-submodules

8
推荐指数
1
解决办法
1565
查看次数

Git:将文件移动到现有子模块中

如何将主仓库中的文件和文件夹移动到现有子模块中?我能以某种方式保存历史吗?

git git-submodules

5
推荐指数
1
解决办法
884
查看次数