昨天,我发布了一个关于如何从我的一台机器克隆Git存储库到另一台机器的问题,我如何从另一台机器“克隆Git”?
现在我可以成功地将Git存储库从源存储库(192.168.1.2)克隆到目标存储库(192.168.1.1)。
但是当我对文件进行编辑,git commit -a -m "test"和git push时,我在目的地(192.168.1.1)上得到了这个错误:
git push
hap@192.168.1.2's password:
Counting objects: 21, done.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1010 bytes, done.
Total 11 (delta 9), reused 0 (delta 0)
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: with what you pushed, and will require 'git reset --hard' to match
error: the work tree to HEAD.
error:
error: You can set 'receive.denyCurrentBranch' configuration variable to
error: 'ignore' or 'warn' in the remote repository to allow pushing into
error: its current branch; however, this is not recommended unless you
error: arranged to update its work tree to match what you pushed in some
error: other way.
error:
error: To squelch this message and still keep the default behaviour, set
error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git+ssh://hap@192.168.1.2/media/LINUXDATA/working
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git+ssh://hap@192.168.1.2/media/LINUXDATA/working'
我正在使用两个不同版本的Git(远程上的1.7版本和本地机器上的1.5版本)。这是一个可能的原因吗?
我发现一篇可能对其他人有用的文章是《Git 5分钟》。
我有一个在Git版本控制下的Xcode项目,我想把它推到DC中的虚拟分布式以太网(VDE)上。VDE运行Centos 5。
我读过的关于Git的文章中没有一篇谈到了裸库。这一切听起来都很简单,直到我尝试了我认为来自SVN背景的东西。
这里的建议使远程存储库裸露工作。更适合我的需求是克隆Xcode项目到projectname。Git,复制到远程服务器;然后,推神奇地起作用了。下一步将是让Xcode推送没有关于提交的错误,但现在我可以从终端做它。
So:
cd /tmp (or another other directory on your system)<br/>
git clone --bare /xcode-project-directory projectname.git<br/>
scp -r projectname.git sshusername@remotehost.com:repos/<br/>
在Xcode中提交后,从Xcode项目中推送更改:
cd /xcode-project-directory<br/>
git push sshusername@remotehost.com:repos/projectname.git<br/>
我确信有一种更流畅更复杂的方法来完成上述工作,但至少这是可行的。为了让一切都清楚,这里有一些澄清:
/xcode-project-directory是xcode项目的存放目录。可能是/Users/Your_Name/Documents/Project_Name。
Projectname字面上是项目的名称,但它可以是任何您愿意调用它的名称。少不更事的人不在乎,你会在乎的。
要使用scp,您需要在远程服务器上有一个允许SSH访问的用户帐户。任何运行自己服务器的人都会有这个。如果你正在使用共享主机或类似的东西,你可能就不走运了。
Remotehost.com是远程主机的名称。你可以使用它的IP地址。为了进一步清晰起见,我在远程主机上使用带有SSH密钥的giitosis,所以当我按下按钮时,不会提示输入密码。文章托管Git存储库,简单(和安全)的方式告诉你如何设置所有这些。
下面是一个测试,你可以看看裸服务器的东西是如何工作的:
想象一下,您有一个工作站和一个服务器,服务器上托管着活动站点,您希望不时地更新这个站点(这也适用于两个开发人员通过一个中间人来回发送他们的工作的情况)。
初始化
在你的本地计算机上创建一个目录,并将cd放入其中,然后执行以下命令:
# initialization
git init --bare server/.git
git clone server content
git clone server local
首先创建一个裸服务器目录(注意末尾的.git)。此目录将仅作为存储库文件的容器。
然后将服务器存储库克隆到新创建的内容目录。这是您的活动/生产目录,将由服务器软件提供服务。
前两个目录位于您的服务器上,第三个是您工作站上的本地目录。
工作流
下面是基本的工作流程:
进入本地目录,创建一些文件并提交。最后将它们推送到服务器:
#创造疯狂的东西
Git提交-av
Git push origin master
现在进入内容目录并更新服务器的内容:
git拉
重复1 - 2。这里的内容可能是另一个开发人员也可以推送到服务器上的,并且您可以从他那里获取本地内容。
检查目标项目中的.git/config:
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[receive]
denyCurrentBranch = updateInstead
如果核心。Bare为false,你可以设置为true:
$ git config core.bare true
然后在本地推送到远程:
git push remote_repo // suppose the destination repo is remote_repo
它会成功,在remote_repo你可以检查git版本。
$ git log -1
commit 0623b1b900ef7331b9184722a5381bbdd2d935ba
Author: aircraft < aircraft_xxx@126.com>
Date: Thu May 17 21:54:37 2018 +0800
现在你不能在你的“工作区”中使用git了:
$ git status
fatal: This operation must be run in a work tree
你应该裸露。裸背为假。
$ git config core.bare false