单个开发人员的git设置?

时间:2009-06-27 14:05:50

标签: git version-control

我经常需要在路上开发东西,没有互联网/网络连接。我只是一个开发人员,所以直到现在我只是在我的机器上有一个SVN存储库,并在我离开时在我的笔记本电脑上结账。问题:这让我在路上没有源控制。

所以我尝试更改为git,这似乎做了我想要的,但我不确定我是否理解它应该如何在我的设置中使用。

本质:

  • 使用git init
  • 在\ myserver \ share \ project上创建了一个存储库
  • 使用git clone
  • 将该存储库克隆到计算机1
  • 使用git clone
  • 将该存储库克隆到计算机2
  • 在机器2上工作,使用git commit提交对本地存储库的任何更改
  • 最后使用git push将所有更改推送回\ myserver \ share \ prohect
  • 在计算机1上使用git pull从\ myserver \ share \ project
  • 获取最新更改

这样可行,但是git push命令给了我一个警告,说不支持推出已签出的分支,因为它可能会混淆索引。现在,我很困惑,因为消息也是用严肃的语气写的,这意味着我应该尊重它(事实上,gitk显示我现在有两个分支:master和remotes / origin / master),但是我尚未完全理解术语。

在我的情况下,正确的步骤是什么?

  • 我只会在机器1或机器2上工作,从不在两者上工作
  • 我打算使用分支作为错误修正/测试的单独分支的方式(就像通常的方式一样),但不是作为一个拥有多个开发人员的方式
  • 我真的主要想用它作为rsync我的SVN的替代品。

编辑:有两个奇怪之处。第一个是如果我只是更改一个文件,它会显示“已更改但未更新”。这很奇怪:

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   myproject/Readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

第二条消息是我认为是罪魁祸首的消息,即git push的输出:

warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches (default)
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 333 bytes, done.
Total 4 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
warning: updating the current branch
warning: Updating the currently checked out branch may cause confusion,
warning: as the index and work tree do not reflect changes that are in HEAD.
warning: As a result, you may see the changes you just pushed into it
warning: reverted when you run 'git diff' over there, and you may want
warning: to run 'git reset --hard' before starting to work to recover.
warning:
warning: You can set 'receive.denyCurrentBranch' configuration variable to
warning: 'refuse' in the remote repository to forbid pushing into its
warning: current branch.
warning: To allow pushing into the current branch, you can set it to 'ignore';
warning: but this is not recommended unless you arranged to update its work
warning: tree to match what you pushed in some other way.
warning:
warning: To squelch this message, you can set it to 'warn'.
warning:
warning: Note that the default will change in a future version of git
warning: to refuse updating the current branch unless you have the
warning: configuration variable set to either 'ignore' or 'warn'.
To file:///\\myserver\share\project
   129649b..1f4b957  master -> master

所以它告诉我“不推荐进入当前的分支”,但我真的不知道这样做的正确方法是什么。

3 个答案:

答案 0 :(得分:10)

否则看起来不错,但为了避免错误消息,您可以将“上游”存储库设置为空存储库,即不包含已检出副本的存储库。你这样做

git --bare init

请参阅e.g. this example

答案 1 :(得分:8)

git push命令要求您指定refspec,否则您必须编辑.git/config以指定在未指定refspecs的情况下的默认操作。例如,考虑具有名为master的分支的场景。

要推送master分支,您将:

git push refs/heads/master:refs/heads/master
git push master:master
git push master

以上所有都是一样的。 refspec看起来像路径是指定refspec最明确的方式。这样,您可以确定您指的是名为master的分支,而不是名为master的标记。

否则,您可以修改.git/config并添加:

[push]
    default = matching

这将允许你只是git push,Git将推送到你当前所在的本地分支的远程分支。例如,如果你当前在分支master,{{1将本地主分支推送到远程主分支。

正如janneb所说,你必须使用一个裸存储库,以便在没有警告的情况下推送它。推送到普通(非裸)存储库的问题是,主要所有者(特定的“普通”存储库)不希望将更改添加到他/她的存储库中。那时,如果有人推送到此存储库,并删除分支(或任何其他更改),则所有者将不会期望这样的更改。因此,警告。

答案 2 :(得分:0)

你似乎对你的主要问题有很好的答案,所以我会解决这个问题:

  

...如果我只是更改文件,则会显示“已更改但未更新”。这很奇怪......

所有其他版本控制系统不同,Git需要明确的用户操作,以便在接下来要提交的事物集中包含已修改的文件。你必须说

$ git add <your modified files>
编辑后

<{em> 我的印象是,这样可以更容易地选择性地仅提交一些修改。

如果您执行“git add”然后修改文件,则必须再次执行“git add”,否则它只会将更改提交到第一个“git add”。

有一个快捷方式git commit,它或多或少地执行其他VCS的“提交”操作。我说“或多或少”,因为我不相信它在所有情况下都是完全匹配的。我所知道的唯一分歧是,一些旧版本的git会添加所有修改过的文件所有新文件,然后提交;这已在当前版本中得到纠正,但我仍然不完全相信这件事。