【问题标题】:Using tar archives to work with git on firewalled machine使用 tar 档案在防火墙机器上使用 git
【发布时间】:2011-09-12 15:53:51
【问题描述】:

我可能做错了什么。场景:3 台计算机:服务器、笔记本电脑和防火墙机器,没有互联网连接。

服务器上有一个 git repo,我想在防火墙机器上处理它,最后将在那里所做的更改传输回服务器。

我现在做的事情很失败,它是这样的:我使用笔记本电脑、tar 和 U 盘作为传输代理,有点像这样

laptop$ git clone http//server/.../project.git
laptop$ tar cvzf project.tar.gz project

然后通过 USB 将 tar 移动到防火墙的机器上,我这样做:

fwm$ tar xvzf project.tar.gz
fwm$ cd project
fwm$ git branch -a
* master
  remotes/origin/x1
  remotes/origin/x2

到目前为止,一切都很好。但是,如果我现在想签出某个分支(例如“x1”),我会收到以下消息:

fwm$ git co x1
error: pathspec 'x1' did not match any file(s) known to git.

我可以尝试通过完整路径强制我的方式,但这似乎也不稳定:

fwm$ git co remotes/origin/x1
Note: moving to 'remotes/origin/x1' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b <new_branch_name>

我说“摇摇晃晃”,因为

fwm$ git status
# Not currently on any branch.
nothing to commit (working directory clean)

我做错了什么,在这种情况下正确的方法是什么?

【问题讨论】:

    标签: git tar


    【解决方案1】:

    你没有做错任何事,只是还没有创建任何本地分支。 &lt;remote-name&gt;/&lt;branch-name&gt; 形式的所有分支都是 remote branches 并且应该只反映该远程上该分支的某些当前或先前状态,在您的情况下为 origin/x1。因此,您无法对这些分支进行提交(如果您这样做了,那么它们将不再反映过去某个时间点在远程上的该分支的状态),因此 git 只是不允许您实际签出这些分支。而不是让您处于一种称为无头分支的状态,您可以提交到该状态,但是如果您切换分支,您的更改将丢失,因为您没有要引用的分支名称(您可以查找reflog 中的这些提交)。

    您真正需要做的就是在解压 git 存储库后创建一个本地分支来处理,但这对于 git bundle 来说可能是一个很好的用例

    【讨论】:

    • 谢谢,git bundle 对我来说是新的。我将评估是否使用该方法或 tar 和“git checkout --track”方法来设置本地分支。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多