移动时计算机之间的git存储库同步?

时间:2011-02-09 17:18:05

标签: git version-control

假设我有台式电脑和笔记本电脑, 有时我在桌面上工作,有时我在笔记本电脑上工作。

来回移动git存储库的最简单方法是什么?

我希望git存储库是相同的, 这样我就可以继续离开另一台计算机。

我想确保两台计算机上都有相同的分支和标签。

由于 约翰

注意:我知道如何使用SubVersion执行此操作,但我很好奇它如何使用git。如果它更容易,我可以使用第三台PC作为两台PC可以同步的经典服务器。

注意:两台计算机都在运行Linux。


更新

所以让我们试试XANI:在服务器上使用一个简单的git repo的想法, 和来自KingCrunch的push命令语法。 在此示例中,有两个客户端和一个服务器。

所以让我们先创建服务器部分。

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

然后,我从其他计算机之一尝试获取克隆的repo副本:

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

然后进入该回购并添加一个文件:

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

现在服务器已使用testfile1.txt进行更新。

无论如何,让我们看看我们是否可以从另一台计算机上获取此文件。

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

现在我们可以看到测试文件。

此时我们可以使用更多内容对其进行编辑,然后再次更新服务器。

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

然后我们回到第一个客户端并执行git pull以查看更新的文件。 现在我可以在两台电脑之间来回移动, 如果我愿意,可以添加第三个。

8 个答案:

答案 0 :(得分:24)

我认为,有多种方法。我将描述,我如何处理这个

我有一台上网本作为24/7服务器,它拥有多个git-repositories。从/到那里我通过SSH推送和拉取更改。从外面访问我使用dyndns.org。它工作正常,特别是因为我有两个以上的系统,需要访问一些存储库。

更新:一个小例子。 可以说我的上网本被称为“上网本”。我在那里创建了一个存储库

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

在我的桌面上,我将创建它的克隆。也许我会添加一些文件

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

在我的便携式设备上,我会(首先)做同样的事情,但是对于远程访问(从我的局域网外),我也会添加外部地址。

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

它就像git(/ git workflows)的工作方式。您可以根据需要添加任意数量的远程存储库。如果两个或更多个引用相同的“物理”存储库,则无关紧要。您不需要自己的本地“服务器”,您可以使用任何您具有ssh访问权限的公共服务器。如果你不需要从外面访问,当然你根本不需要公共服务器。裸存储库也可以在桌面系统上,然后您可以在本地文件系统中创建工作副本存储库。

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

这就是方式,我如何处理这个问题,而且对我而言,它工作得很好(如果不是完美的话);)

要阅读的内容:http://progit.org/ 真的好书.-

答案 1 :(得分:6)

我会将repo从一个盒子克隆到另一个盒子,然后设置两个repos,这样我就可以从另一个盒子中git fetch

将远程从origin重命名为另一个框的名称,使远程分支更易于阅读。

请注意,只使用git fetch(而不是git push),这适用于非裸存储库:

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo

答案 2 :(得分:4)

最简单的方法:用--bare创建的中央仓库(所以没有签出文件,只有.git东西),或者github

“分布式”看起来像这样:

设定:

  1. 在笔记本电脑上:git remote add desktop ssh://user@desktop/home/user/repo/path
  2. 在桌面上:git remote add laptop ssh://user@laptop/home/user/repo/path
  3. 同步:

    git pull laptop/desktop(推送在非裸存储库上不会很好用,因为当推送到远程存储库时,git不会修改已检出的文件)

    或者,在pendrive上制作回购;)

答案 3 :(得分:1)

如何简单地使用rsync

答案 4 :(得分:1)

难道你不能只在GitHub,BitBucket或GitLab上创建一个远程存储库吗? (后两家公司提供无限制的免费私人存储库)。当您完成工作日时,只需使用git push将更改推送到远程仓库即可。回家后,只需git pull将工作中的更改提取到家用机器上即可。同样,当您在家完成时,请git push,然后当您重返工作岗位时,请执行git pull

答案 5 :(得分:1)

在两台计算机之间来回移动git存储库的最简单方法是什么?

方案1:我仅在PC1上工作(编辑代码和文件),但希望在PC2上也有文件的副本(例如:建立整个代码库)。

在<1 MB的时间内通过wifi热点从PC1同步到PC2,同时使用<25 MB的数据:

我在随身携带的一台较弱的计算机(笔记本电脑)上工作,但在其他地方的功能更强大的计算机上工作。我一直使用git使用脚本从笔记本电脑同步到另一台计算机。我只需键入以下命令即可运行它:

sync_git_repo_from_pc1_to_pc2

就是这样!即使使用手机wifi热点并处理大小为数十亿字节的存储库,通常也需要大约25 MB的数据和约30秒到1分钟的时间。我被套进PC2,所以我在PC2上执行git log -1以验证同步是否有效,然后运行build命令。完美运作。试一试。有关详细信息,请参见下面的链接。

注意:PC2上的克隆存储库将位于名为somename_SYNC的git分支上。如果您希望脚本具有相同的分支名称,而不是始终使用“ SYNC分支”,则可以对其进行适当的修改。如果需要,可以修改脚本以获得更类似于下面的方案2的效果。但是,手动进行场景2 并不困难,因此您可能只想继续手动执行场景2。在方案1中,自动化脚本是最有益和最省时的,因为它允许轻松快速地进行“修改,同步,构建”工作流,在PC1上进行“修改”,“同步”从PC1运行,但也影响PC2,并且在PC2上进行了“构建”。

链接:

  1. 此处的完整设置和安装说明:
    Work on a remote project with Eclipse via SSH
  2. 自述文件,文档和此处的仓库: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md
  3. 确切的脚本在这里:
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

方案2:我在多台计算机上工作(编辑代码和文件),并且希望能够从世界上任何一台计算机上编辑同一代码存储库:

我希望git存储库是相同的,这样我就可以继续在另一台计算机上离开的地方了。 我想确保两台计算机上都具有相同的分支和标签。

  1. 转到https://github.com并创建一个帐户,并可选地(推荐)创建set up ssh keys

  2. 现在使用其Web界面创建新的存储库。

    1. 从2020年或更早的年份开始,GitHub也允许免费的私有存储库,因此,即使对于私有的,封闭源代码的项目,它也能很好地工作。
  3. 找到新的存储库ssh或https克隆URL。例如:git@github.com:ElectricRCAircraftGuy / eRCaGuy_dotfiles.git或https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git

  4. 将项目克隆到PC1上。例如:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. 并在PC2上重复相同的克隆命令。

  6. 现在在PC1上进行一些更改,将其提交,然后将其推送到github上的“远程”存储库中:

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
    
  7. 现在在PC2上,进行更改:

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. 现在您可以使用上面仅两个步骤显示的命令在PC2上编辑文件,提交文件并将其推送到github,然后从PC1运行git pull从PC2提取这些更改

  9. 请根据需要在PC1或PC2上继续执行此过程,并轻松共享文件并在两台计算机之间分配工作。只需记住,所有更改必须先提交并在一台PC上推送到github ,然后才能签出(拉出它们)并继续在另一台PC上工作。

  10. 如果遇到两台PC之间文件有点不同步的情况,则可能不得不使用一些额外的分支,进行一些合并,解决冲突等。然后,它变得更像与一个你们都在同一个仓库中工作的小团队一起工作。 Google是您的朋友。 Git非常非常非常强大,并且具有几乎所有内容的命令,命令集或工作流。

答案 6 :(得分:0)

好吧,你可以推送(通过Git)到你可能设置的服务器。或者您可以将您的存储库存储在GitHub中并将其用作同步桥。

答案 7 :(得分:0)

您可以在任何计算机上创建存储库,可能是桌面计算机,然后从笔记本电脑和自身推送/拉出存储库。