我一直在 Windows 10 计算机(基于 Cygwin)上使用 mobaXterm 作为访问 ROOT 和 Python 脚本/宏的终端。此外,我和我的同事一直在使用 Gitlab 来共享这些脚本/宏。最近,我们开始处理一个 LaTeX 文档,该文档也已使用 Gitlab 共享。我一直面临的问题是尝试将 Gitlab 与我使用 Overleaf 作为 LaTeX 编辑器进行集成。
我按照给出的指南进行操作这里介绍如何将 Overleaf 的 git 存储库与 Github 链接,只是遇到一些烦人的问题。
首先,我似乎能够通过以下行将 Overleaf 存储库 git 克隆到我的计算机上:git clone https://git.overleaf.com/%%%%%%%%%%%%%% note_name
其次是git remote rename origin overleaf
然后我确实拉过线git pull overleaf master
这些似乎都没有造成任何问题。然后我通过以下行添加了我的 Gitlab 存储库git remote add gitlab https://gitlab.thing.ty/folder/note_name.git
git config --global push.default matching
然后我通过和向 Gitlab 做了初步推送
git push gitlab
Username for 'https://gitlab.thing.ty':
Password for 'https://[email protected]':
Counting objects: 21, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (21/21), 50.81 KiB | 0 bytes/s, done.
Total 21 (delta 7), reused 0 (delta 0)
To https://gitlab.thing.ty/folder/note_name.git
ccf7614..596ba69 master -> master`
随后从 Overleaf 拉出git pull overleaf master
remote: Counting objects: 5, done
remote: Finding sources: 100% (3/3)
remote: Getting sizes: 100% (4/4)
remote: Compressing objects: 100% (7764/7764)
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://git.overleaf.com/%%%%%%%%%%%%
* branch master -> FETCH_HEAD
f0173f3..d3bb61b master -> overleaf/master
Merge made by the 'recursive' strategy.
Section2.tex | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)`
当我需要提交更改并将更改推送到 Gitlab 时,我现在遇到了问题。我得到诸如以下的行:
git commit -m "configuring git access, no major edits have been made"
On branch master
Your branch is ahead of 'overleaf/master' by 16 commits.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
和
git push gitlab
Username for 'https://gitlab.thing.ty':
Password for 'https://[email protected]':
To https://gitlab.thing.ty/folder/note_name.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to
'https://gitlab.thing.ty/folder/note_name.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
我似乎无法弄清楚如何同时管理两个不同的存储库。
答案1
提交数量最多的存储库应该是您在尝试任何更改之前从中提取的存储库。
git pull upstream master
之后确保您的 gitlab 存储库与上游同步。
git push origin master
这样,如果您使用,两个存储库都会在您工作时同步
git log
你应该看到类似的东西
commit 798a0433ad807b6127066cac3f6e33d6551ef0d4 (HEAD -> master, upstream/master, origin/master)
这意味着两个存储库都在同一个提交中。
完成工作后(如果在单独的分支上进行则更好),您需要提交这些更改。git commit --all -m "some text"
完成此操作后,您应该会看到git log
您的新分支领先于两者upstream
,并且origin
,如果您想将更改集成到您应该使用的任何一个分支中git rebase
,这将fast-forward
在存储库上创建一个。我们不使用,pull
因为它会在合并时融化所有提交。之后,我假设您对这两个存储库都没有写入权限。
例如,用于git fetch
从一个存储库下载更改,git fetch upstream master
然后查看提交,git log
然后用于git rebase
以安全的方式合并更改。
参考Git 官方书籍欲了解更多信息,但读完前 3 章后你应该就明白了。
答案2
拥有多个 git 遥控器有三种常见情况,处理方式取决于您需要哪种情况:
- 您有某个软件的分支,上面有您自己的自定义补丁。这是我所知道的最常见的情况,也是我个人经历过的唯一一个,实际上是一种非常典型的开发情况。一个很好的例子是https://github.com/Ferroin/linux,我在其中维护了一小部分本地补丁https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
- 您有多个上游存储库,您可以在其中发布工作并希望它们彼此保持同步。我不知道有哪个项目定期执行此操作,尽管有时当项目在其存储库的不同托管提供商之间转换时会执行此操作。
- 您有一个单独的开发和发布存储库。这与情况 1 非常相似,只是相反。
如前所述,处理事情取决于您所处的情况。最简单的情况(也是我的情况)思考实际上,你已经给出了问题的描述)是情况2,其中管理只是确保在推送更新时推送到两个存储库(git 要求你显式推送到每个远程)。情况 3 也非常简单,当您发布版本时,只需对其进行标记并推送到两个存储库,但仅在不发布某些内容时才推送到您的开发存储库。
情况 1 虽然最常见,但也是最复杂的,因为它不仅仅涉及推和拉命令。辅助远程重要的唯一情况是当上游有更新时,此时您需要拉取该更新并在其之上重新设置(或合并,取决于您的本地工作流程)您的本地分支。
另外,您可能有兴趣阅读官方git 书,它在解释事情方面做得很好。关于“分布式 Git”的章节可能是与这个问题最相关的部分,但我绝对建议阅读整篇文章,因为理解工作流程需要很好地理解 Git 如何进行源代码控制。