我刚开始在我的论文中使用 git,我的问题是什么才是适合我的工作流程。 这是我的先决条件:
使用的硬件:
- 家里用的笔记本电脑A
- 笔记本电脑 B 我在图书馆时使用的上网本
- 大学的台式电脑
- 我大学服务器上的私有(private)文件空间也运行 git(由大学预装,很好,不是吗?)
在我知道之前我所做的就是用 LaTeX 写我的论文,然后在所有这些计算机之间手工复制它。经常发生我正在写某事。在一台机器上,但后来我休息了一天,我不知道我的最新版本在哪里。在这些情况下,我使用 diff 来比较并找出最新的文档。
对 git 的一些阅读表明它对我有很大帮助。 我想到了在服务器上有一个中央存储库,并用所有计算机向/从它推送/pull 。
我现在已经在服务器上创建了一个裸仓库,并在每台计算机上创建了本地仓库(通过 git init
)。
但我不确定这是否正确: 现在所有计算机都同步,因此所有本地存储库都包含相同的文件/版本。我已经从我的笔记本电脑 A 推送到服务器上的裸仓库。
我试图从服务器仓库 pull 到我的台式电脑:
git pull origin master
输出:
* branch master -> FETCH_HEAD
Merge made by the 'recursive' strategy.
如果我理解正确的话,这会在我的台式计算机上创建一个分支。在我开始在台式电脑上工作之前,我是否应该在此之后应用任何进一步的操作?
另一个尝试是:
git pull origin master:master
输出:
! [rejected] master -> master (non-fast-forward)
据我在 Git 书中读到的那样,这是一种预期的行为,但我不能说出原因。这不会阻止我每次 pull 时都创建一个新分支吗?
无论如何,我现在阅读了很多关于 stackoverflow 的帖子以及官方 git 书中的一些章节,但我必须说,我的脑袋有点嗡嗡作响。
我不知道我在这里开始的工作流程对于我想要实现的目标是否完全正确。也许我不应该使用服务器 git 而只是克隆到文件空间? 有人能让我走上正轨吗?
非常感谢。
最佳答案
在服务器上创建裸仓库后,您应该从服务器上的裸仓库克隆,而不是在每台计算机上运行 git init。例如,如果您使用的是 ssh 协议(protocol),则可以在其他每台计算机上执行类似的操作:
git clone ssh://username@servername:/path/to/bare/repo.git
这将自动将您的源远程设置为带有裸仓库的服务器。然后,您可以在本地计算机上进行所需的所有更改,使用如下方式在本地提交您的更改:
git add .
git commit -m 'Made some changes'
然后你就可以:
git pull
当您想要更新时,并且:
git push
当您想将本地提交的更改推送到服务器时。
关于git - 适用于涉及服务器的论文的 Git 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524369/