我经常需要在路上开发东西,没有互联网/网络连接。我只是一个开发人员,所以直到现在我只是在我的机器上有一个SVN存储库,并在我离开时在我的笔记本电脑上结账。问题:这让我在路上没有源控制。
所以我尝试更改为git,这似乎做了我想要的,但我不确定我是否理解它应该如何在我的设置中使用。
本质:
git init
git clone
git clone
git commit
提交对本地存储库的任何更改git push
将所有更改推送回\ myserver \ share \ prohect git pull
从\ myserver \ share \ project 这样可行,但是git push
命令给了我一个警告,说不支持推出已签出的分支,因为它可能会混淆索引。现在,我很困惑,因为消息也是用严肃的语气写的,这意味着我应该尊重它(事实上,gitk显示我现在有两个分支:master和remotes / origin / master),但是我尚未完全理解术语。
在我的情况下,正确的步骤是什么?
编辑:有两个奇怪之处。第一个是如果我只是更改一个文件,它会显示“已更改但未更新”。这很奇怪:
# 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
所以它告诉我“不推荐进入当前的分支”,但我真的不知道这样做的正确方法是什么。
答案 0 :(得分:10)
答案 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会添加所有修改过的文件和所有新文件,然后提交;这已在当前版本中得到纠正,但我仍然不完全相信这件事。