来自bzr / svn背景的git

时间:2011-01-02 08:14:02

标签: git

我已经在我的两台计算机上使用bzr一段时间了,并使用Dropbox同步存储库。到目前为止,我对以下工作流程没有任何问题:

  • (笔记本电脑)创建bzr存储库
  • (笔记本电脑)进行编辑,提交更改
  • (笔记本电脑)'bzr push'到Dropbox
  • (桌面)创建bzr存储库
  • (桌面)来自Dropbox的'bzr pull'
  • (桌面)进行编辑,提交更改
  • (桌面)'bzr push'回到Dropbox

(我知道它更像svn工作流程,使用Dropbox作为中央存储库,但是在台式机和笔记本电脑上设置svn服务器以便能够使用同步的Dropbox文件夹作为主存储库并不吸引我所有。)

依此类推。

但是现在我正在学习Rails,而Rails就是关于git的。我试图使用类似的工作流程,并陷入悲痛之中。

  • (笔记本电脑)创建git存储库
  • (笔记本电脑)进行编辑,提交更改
  • (笔记本电脑)'git clone'到Dropbox
  • 来自Dropbox的
  • (桌面)'git clone'
  • (桌面)进行编辑,提交更改
  • (桌面)尝试更改Dropbox ......这就是我遇到问题的地方。

我已经完成了一些阅读,看起来克隆不是首先使用的正确命令,我还应该使用推送? 'git remote -v'告诉我:

origin  /home/karpie/Dropbox/Sites/Rails (fetch)
origin  /home/karpie/Dropbox/Sites/Rails (push)

但推动仍然无效......

Counting objects: 214, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (182/182), done.
Writing objects: 100% (192/192), 725.23 KiB, done.
Total 192 (delta 31), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To /home/karpie/Dropbox/Sites/Rails
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '/home/karpie/Dropbox/Sites/Rails'

我...真的不知道这意味着什么,而且非常令人生畏。

那么......如果我的方式真的不是'git方式',我怎样才能掌握适当的工作流程?如何解决当前的问题?我真的不介意在我的Dropbox和笔记本电脑上查看存储库,只要我不丢失桌面上的内容。

PS。虽然我有一个github帐户,但我不想在当前公开我的网站开发代码,所以我试图改用Dropbox。

欢呼声,

Karpie

编辑:我认为像Giggle这样的GUI可能会帮助我掌握“为一切而分支”的概念,除非有人有更好的方法来掌握它,

2 个答案:

答案 0 :(得分:6)

背景

Git具有裸存储库和非裸存储库的概念。不同之处在于非裸存储库包含工作空间,即您签出的文件。这是您在笔记本电脑和台式机上创建和使用的存储库。裸存储库不包含任何签出文件,并且通常作为中央存储库存在于服务器上。你得到的错误中git抱怨的是,它不喜欢推送到非裸存储库,因为这会改变任何用户可能使用该存储库的“脚下”。

解决方案

  1. 像现在一样在笔记本电脑上创建和使用存储库。
  2. 在Dropbox中创建存储库:mkdir Repo; cd Repo; git init --bare
  3. 推送到新创建的裸存储库。
  4. 其他一切照常。 :)

答案 1 :(得分:1)

创建Dropbox repo时,请使用git init --bare使其裸露。然后你可以推动它。该错误解释了为什么您不想推送到非裸露的回购(即带有签出副本的回购)