我希望这似乎并不明显.我有两个git存储库.我们决定将一个分支从第一个repoistry拆分为一个git子模块.现在我一直在使用这个子模块,但是人们一直在将第一个存储库的提交推送到作为子模块的分支中.
如何将第一个存储库中分支的更改合并到新创建的第二个存储库中?(我们现在用作子模块)
我尝试将另一个遥控器添加到第二个仓库并将该分支合并到一起,使用:
git remote add otherOrigin git-Blah@blah.blah:originalRepo.git
git merge otherOrigin originalBranch
Run Code Online (Sandbox Code Playgroud)
但是我得到:
fatal: 'otherOrigin' does not point to a commit
Run Code Online (Sandbox Code Playgroud)
谢谢
我已经看过几个解决这个问题的线程.
我还查看了git filter-branch手册页.
更新
我已经改为2脚本系统:
#!/bin/bash
git filter-branch --index-filter '~/doit.sh' HEAD
Run Code Online (Sandbox Code Playgroud)
和doit.sh
#!/bin/bash
git ls-files -s | \
sed "s-\t-&data/perl_modules/-" | \
GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info && \
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
Run Code Online (Sandbox Code Playgroud)
这避免了以前的错误,但现在得到了这个(用[...]替换了路径):
Rewrite c35e4ef0626fb2045f57fa5b605e7663b8d06196 (1/10977)mv: cannot stat `[...]/.git-rewrite/t/../index.new': No such file or directory
index filter failed: ~/doit.sh
Run Code Online (Sandbox Code Playgroud)
我跑的时候
ls-files- s | sed ... | git update-index ...
Run Code Online (Sandbox Code Playgroud)
我得到它应该生成的索引文件.当我更改doit.sh文件以输出sed的结果而不是将其传递给git update-index时,它似乎产生了正确的输出......似乎git update-index在下面运行时根本就不创建文件--index过滤器....
再次更新:
当我改变
mv"$ GIT_INDEX_FILE.new""$ GIT_INDEX_FILE"
至
mv"$ GIT_INDEX_FILE.new""$ GIT_INDEX_FILE"|| 真正
它失败了第一个MV,但所有其他(到目前为止)都在工作.
所有这些都在这个脚本中达到了高潮:
git filter-branch --index-filter \
'git ls-files …Run Code Online (Sandbox Code Playgroud) 我想将几个目录从一个git项目移动到另一个目录,保留其历史记录.问题是,我看到的所有示例似乎都在展示如何将目录提取到它自己的git项目中,保留历史记录git filter-branch.是否有可能将这些目录从一个存储库移动到另一个存储库,保留其历史记录,如果目标存储库已经有其他版本化文件(与要以任何方式移动的文件不冲突)......?
有人可以告诉我一个如何做到这一点的例子吗?谢谢!
我正在尝试将一些 Git 存储库迁移到一个 monorepo 中。
我有两个项目存储库,让我们称它们为project1和project2. 在我的 monorepo 中,我想要一个projects包含两个子目录的目录,project1以及project2. 每个子目录都应包含来自相应项目的文件,并保留 Git 历史记录。
这甚至可以使用标准的 Git 命令吗?
注意:我看过 Lerna -lerna import完全符合我的需要,但不幸的是它只适用于 JS 项目,而我的一个项目是 Ruby 项目。
现在我知道大多数git专家会立即想到git rebase,但我更普遍地使用"rebase"这个词:我的项目结构如下:
.
..
.git
tools
lib
src
.git
build
Run Code Online (Sandbox Code Playgroud)
两者.和./src目录都是明显的git存储库,并且具有很长的历史和大量的提交.存储库.忽略src目录(这是它自己的存储库).
我刚刚意识到我只想在.跟踪包括源文件在内的所有内容时只需要一个repo ,因为坦率地说,构建系统随着源代码的发展而变得非常广泛.
我的问题是我不知道如何让这个存储库保留历史记录,该历史记录现在是存储库的一部分src.它甚至可能吗?这就是我所说的'变基' - 如果./src/main.c通过./src/.git一些N次提交跟踪变化,那么我想保留这些变化并让它们成为新存储库的一部分./.git.相同的历史,重新定位的文件路径.
UPDATE
从我收集的内容来看,子树合并不是我想要的东西.简而言之,它比我需要的更多.我只需要旧回购的内容,将所有开发分支和所有提交,标签等一起看起来好像它们始终是父回购的一部分.在本质上,唯一的变化是文件本身的路径 - 在子回购跟踪之前./main.c,新的回购现在将跟踪./src/main.c,并且据我所知,git跟踪内容,而不是文件,然后改变文件路径,如上所述和对这些的引用路径,应该是相当微不足道的,对吗?
这个问题不是关于如何合并两个git repos; 已经讨论过这个问题(关键字:"子模块","子树合并").
这里的问题是,如何合并两个GitHub回购?
我想尽可能多地保留GitHub存储库中的GitHub功能/数据.最重要的是,我想保留GitHub存储库中的问题和维基.
我怎么能实现这一目标?
信息:
我刚刚了解到GitHub wiki 是git repos(摘要:)git://github.com/you/proj.wiki,我已成功将更改推送到我的wiki-repo.
我正在尝试将mercurial存储库迁移到git,但问题是mercurial存储库有子存储库(一些有分支),还有很多合并和分支本身.我希望最终的git存储库能够保留所有这些历史记录,并且在检出存储库或其他分支的早期部分时是正确和完整的.我不需要新的存储库有子模块或子树,虽然我也会接受使用它的解决方案.我看到的一些方法将新repo顶部的所有子站点合并为分支,这意味着过去的签出不包含子目录中的所有文件.我也尝试将所有内容导入为分支,将头部重置为过去,合并和重新定位,但是有太多的合并并且出现了许多冲突,即使使用--preserve-merges,所以我宁愿避免这种情况.我也找不到任何方法在git中复制mercurial子库更新历史作为子模块更新历史记录.有没有人有任何想法?谢谢.
在下面的示例中,我想演示对 Git 子模块进行更改并在本地提交可能会导致非常糟糕的情况,在这种情况下我想找到一个可行的解决方案(除了答案“伙计,不要使用Git 子模块是邪恶的”)
我首先创建两个存储库:一个主项目及其子模块:
~ $ for r in main sub; do mkdir $r; cd $r; git init; cd ..; done
Initialized empty Git repository in ~/main/.git/
Initialized empty Git repository in ~/sub/.git/
Run Code Online (Sandbox Code Playgroud)
让我们向子模块添加一些内容:
~/ $ cd sub
~/sub $ touch sub && git add sub
~/sub $ git commit -m "Added sub"
[master (root-commit) a14ce2f] Added sub
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 sub
Run Code Online (Sandbox Code Playgroud)
然后我们在主项目中导入该子模块:
~/sub $ cd ../main
~/main $ git submodule …Run Code Online (Sandbox Code Playgroud) 我是新手git-lfs,以下是我配置并尝试推送的步骤git-lfs
git clone git@gitlab.example.com:group/project.git
将 tar.gz lfs 文件从不同的 repo 复制到我当前的 repo,然后
git lfs install
git lfs track "*.tar.gz"
git add .gitattributes
git commit -m "message"
Run Code Online (Sandbox Code Playgroud)
同时git push origin master:
我面临的错误:
(missing) code.tar.gz (f2b4bf22bcb011fef16f80532247665d15edbb9051***)
Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done.
hint: Your push was rejected due to missing or corrupt local objects.
hint: You can disable this check with: 'git config lfs.allowincompletepush true'
error: failed to push some refs to 'git@gitlab.example.com:group/project.git' …Run Code Online (Sandbox Code Playgroud)