相关疑难解决方法(0)

Git - 来自不同存储库的Merge分支

我希望这似乎并不明显.我有两个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 merge branching-and-merging

7
推荐指数
1
解决办法
3816
查看次数

将git存储库组合到子目录中时出错

我已经看过几个解决这个问题的线程.

组合多个git存储库

组合多个git存储库,名称中包含空格

我还查看了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 history

7
推荐指数
1
解决办法
2347
查看次数

将多个目录从一个git项目移动到另一个git项目,保留其历史记录

我想将几个目录从一个git项目移动到另一个目录,保留其历史记录.问题是,我看到的所有示例似乎都在展示如何将目录提取到它自己的git项目中,保留历史记录git filter-branch.是否有可能将这些目录从一个存储库移动到另一个存储库,保留其历史记录,如果目标存储库已经有其他版本化文件(与要以任何方式移动的文件不冲突)......?

有人可以告诉我一个如何做到这一点的例子吗?谢谢!

git

6
推荐指数
1
解决办法
1658
查看次数

如何在保持提交历史的同时将多个存储库迁移到单一存储库中?

我正在尝试将一些 Git 存储库迁移到一个 monorepo 中。

我有两个项目存储库,让我们称它们为project1project2. 在我的 monorepo 中,我想要一个projects包含两个子目录的目录,project1以及project2. 每个子目录都应包含来自相应项目的文件,并保留 Git 历史记录。

这甚至可以使用标准的 Git 命令吗?

注意:我看过 Lerna -lerna import完全符合我的需要,但不幸的是它只适用于 JS 项目,而我的一个项目是 Ruby 项目。

git version-control monorepo

6
推荐指数
1
解决办法
2077
查看次数

如何将嵌套的git repo合并到父repo中,保留历史记录?

现在我知道大多数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

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

如何合并两个GitHub回购?

这个问题不是关于如何合并两个git repos; 已经讨论过这个问题(关键字:"子模块","子树合并").

这里的问题是,如何合并两个GitHub回购?

我想尽可能多地保留GitHub存储库中的GitHub功能/数据.最重要的是,我想保留GitHub存储库中的问题维基.

我怎么能实现这一目标?


信息:

我刚刚了解到GitHub wiki 是git repos(摘要:)git://github.com/you/proj.wiki,我已成功将更改推送到我的wiki-repo.

git github

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

将mercurial repo与子存储库迁移到git,保留历史记录的最佳方法?

我正在尝试将mercurial存储库迁移到git,但问题是mercurial存储库有子存储库(一些有分支),还有很多合并和分支本身.我希望最终的git存储库能够保留所有这些历史记录,并且在检出存储库或其他分支的早期部分时是正确和完整的.我不需要新的存储库有子模块或子树,虽然我也会接受使用它的解决方案.我看到的一些方法将新repo顶部的所有子站点合并为分支,这意味着过去的签出不包含子目录中的所有文件.我也尝试将所有内容导入为分支,将头部重置为过去,合并和重新定位,但是有太多的合并并且出现了许多冲突,即使使用--preserve-merges,所以我宁愿避免这种情况.我也找不到任何方法在git中复制mercurial子库更新历史作为子模块更新历史记录.有没有人有任何想法?谢谢.

migration git mercurial git-submodules mercurial-subrepos

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

如何将 github 项目从一个存储库转移到另一个存储库

我很好奇您是否可以将 github“项目”从一个存储库移动到另一个存储库。

应该更具体。Github 有一个“项目”功能,允许您创建一个简单的看板。在此处输入图片说明

我想把这个项目从 repo-a 移到 repo-b。查看用户界面,我看不到这样做的方法。

github github-projects

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

是否有在本地修改 Git 子模块的正确方法?

在下面的示例中,我想演示对 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 git-submodules

4
推荐指数
1
解决办法
9547
查看次数

由于丢失或损坏的本地对象 git-lfs,git push 被拒绝

我是新手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)

git github bitbucket gitlab git-lfs

4
推荐指数
1
解决办法
2125
查看次数