3

如同:

我正在尝试找出完成以下工作的工作流程步骤:

  1. 在“家”上本地工作后,我想在W:\DEV\proj1
    • git init W:\DEV\proj1
    • cd W:\DEV\proj1
    • git add *
    • git commit -m"1st home"
  2. 然后我想将此仓库克隆到其他地方的“便携式”(即usbkey),可以说P:\DEV\roam1
    • git clone . P:\DEV\roam1
  3. 然后我希望能够在任一位置(“家”或“便携式”)工作并来回同步更改。
    • (便携式)
      • // new file f1.txt
      • git add *
      • git commit -m"1st portable"
      • git ??? -- 同步 f1.txt > “家”?
    • (在家)
      • // new file f2.txt
      • git add *
      • git commit -m"2nd home"
      • git ??? -- 同步 f2.txt > “便携”
    • 重复

A 部分)我想我了解如何克隆和同步到“集中式集线器”,即 github 或将裸存储库放在 USB 棒上并在我在新位置时从它克隆,但我宁愿没有每次我想在新地方完成工作时从便携式回购中克隆。此外,如果我只想查看未安装 git 的计算机上的文件。

B部分)另一个适用的场景是我想使用git基本上将目录备份到外部硬盘驱动器(通常可以推送到裸存储库),但我想访问另一台计算机硬盘驱动器上的文件而没有安装git .

4

2 回答 2

2

基于@VonC's answer的具体示例。

设备

  • LOCAL=您的本地机器,即C:\MyDocuments\Whatever
  • PORTABLE= 其他东西,例如 USB 密钥

回购协议

  • LOCAL/myproject/= 你工作的“日常”存储库,推送到 github 等
  • PORTABL/myproject.git= 裸露的“集中式集线器”(在 USB 密钥上)
  • PORTABLE/myproject-preview= 包含来自 repo 的最新代码的非 git 文件夹
  • PORTABLE/myproject-working= 一个 git repo,你可以在不在家的时候工作(基本上和LOCAL/myproject

文件结构

注意:我在我的计算机上的一个文件夹中测试这一切,而不是实际的单独驱动器,YMMV

-LOCAL/
   -myproject/
      -.git/
      - other files

-PORTABLE/
   -myproject.git/
       -hooks/
       -info/
       <etc>
   -myproject-preview/
      - other files
   -myproject-working/
      -.git
      - other files

配置

近似命令...假设您在这次头脑风暴之前首先在本地工作

# start at home
cd LOCAL
git init myproject
<do some work>
# suddenly you realize you want a portable hub
cd PORTABLE
# ready the dump locations (depending on what you want)
mkdir myproject-preview
mkdir myproject-working
# start the hub
git init myproject.git --bare
<make the post-receive hook, see below *not cool enough to do it from the command line>
# backup home
cd LOCAL/myproject
git remote add origin PORTABLE/myproject.git
git push origin master #this shows up in ...preview and ...working
<do more work>

接收后挂钩

从@VonC 的其他答案随机 coderwall中精心复制。

您可以两者都做,或者只选择“预览模式”或“便携式工作”。

注意相对路径的使用(因为我们在PORTABLE/myproject.git/hooks/)。

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" == "$branch" ]; then
        # preview mode
        git --git-dir=../myproject.git --work-tree=../myproject-preview checkout -f
        # portable working mode (https://coderwall.com/p/oj5smw)
        GIT_WORK_TREE=../myproject-portable git checkout -f $branch
    fi
done
于 2013-11-21T21:53:25.937 回答
1

但我不想每次我想完成工作时都从便携式存储库中克隆。

您不必这样做,除了在新位置初始化您的存储库(在这种情况下,您可以在本地环境中克隆 USB 棒的裸存储库)

每次你想完成工作时,你会:

  • 确保本地存储库中名为“origin”的远程指向 U 盘上的裸存储库
  • git pull(或 git pull --rebase)以便将潜在的更改从 USB 恢复到本地
  • 工作
  • git push(回到 USB 密钥)

您需要某种“集中式/便携式”存储库来拉取/推送。


不希望“集中式集线器”成为一个裸仓库,假设我去另一台没有 git 的计算机,我只想向某人展示一个文件

我仍然会在 USB 棒上推荐一个裸仓库,但我会在那个裸仓库上添加一个接收后挂钩,以便更新一个单独的工作树(仍在USB 棒上)

请参阅“想要设置一个将提交的文件复制到特定文件夹的挂钩”作为此类挂钩的示例。

这样,在我的“集中式和便携”git repo 托管环境(即usb 密钥!)上,我总是有:

  • 一个裸仓库(我可以克隆/拉取/推送)
  • 一个完整的工作树,最新的提交。
于 2013-08-07T07:33:06.593 回答