我在远程仓库中找不到任何文件。
git status
。它给了我整个列表,但每个文件前面都有“删除”字样。见下文。使用我不在任何分支上的提示,我检查了具体的提交。它找到了,但文件和git status
仍然没有显示任何效果。它告诉我:
注意:转移到不是本地分支的'9c47b5'
试图结帐主HEAD。没有运气,它告诉我
-jailshell:/ usr / bin / git:没有这样的文件或目录
Git状态显示:
[frumwebc@your tanee.com]$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: _notes/dwsync.xml
# deleted: contact-us/_notes/dwsync.xml
# deleted: contact-us/index.html
#
警告是:
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'.
Pushing to fru@67......ee.com
To fru@67......ee.com/26d352f..9c47b55 master -> master
答案 0 :(得分:6)
当您在Git中推送到远程仓库时,它不会更新该远程仓库的工作副本。这意味着工作副本将与您推送的最后一个版本不同步。为避免这种混淆,建议只推送裸露的回购;没有工作副本的回购。原因是如果工作副本中的任何内容发生了变化,您将无法收到有关此事件的警告并执行合并,因为您正在推送远程仓库。
通常,您应该修改工作副本的唯一方法是从其中进行,例如从该工作副本中执行提取或结帐。如果您希望在推送时自动检查服务器某处的代码副本,则应设置post-receive hook,然后将git pull
转到具有工作副本的存储库中。
答案 1 :(得分:3)
我在工作中有一个类似的用例:在我检查进程,监视日志等的许多服务器上需要'pristine'主目录 - 当我添加新命令时不必更改它们中的每一个,别名,脚本等。从这里的现有答案中学习我解决了这样的问题:
为了让它们保持最新,我添加了以下git别名,以帮助我在一个命令中更新所有远程工作副本:
[alias]
pushall = "!for remote in myremote{1..10}; do git push ${remote} master; ssh ${remote} git reset --hard; done"
现在,在配置新的远程控制器时 - 我将$ HOME目录从现有远程控制台转换为新远程控制台,然后将我的新计算机添加到上面的别名中。在进行更改后运行'git pushall'(比如在添加一个方便的新脚本以查看日志之后)将使用我想要的(远程)$ HOME目录的原始副本更新所有远程工作副本。不再需要手动更新每一个遥控器!
注意:整个别名的双引号在这里很重要,否则分号会咬你
感谢其他人提供帮助我实现这一目标的现有答案。
答案 2 :(得分:2)
你不应该在远程主机上创建一个'标准'git仓库,正如Brian Campbell所说。你应该做什么:
将您希望置于版本控制下的所有文件复制到本地计算机上的目录中。
删除它们及其在远程主机上的包含目录。
仍然在远程主机上创建一个名为projectname.git的新目录(替换projectname
的有意义的名称),cd进入它,然后运行git init --bare
在本地计算机上,在您放置文件的目录中:
git init
初始化git repo git add .
以添加所有文件和子目录git commit -m "Initial commit"
[master agd27c9] Initial commit
git remote add origin ssh://hostaddress/path/to/dir/projectname.git
(如果您通常使用ssh:// user @ hostaddress访问远程主机,则可能需要稍微修改一下)git push origin master
Counting objects ...
Delta compression ...
Writing objects ...
Total ...
To ssh:// ...
git config branch.master.remote origin && git config branch.master.merge refs/heads/master