我正在git pull通过root用户从任何目录尝试某个存储库.
例如,在执行git pull从/root/:
#> cd ~
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull
/usr/libexec/git-core/git-sh-setup: line 142: cd: /root/.: Permission denied
Cannot chdir to /root/., the toplevel of the working tree
Run Code Online (Sandbox Code Playgroud)
并执行git pull来自/:
#> cd /
#> sudo -u dmalikov git --git-dir=/home/dmalikov/path/to/repo/.git pull
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
为什么当前目录会影响git pull命令?
如何cd避免多余的?
pwd是"目前的工作目录".这是情况.
pwd: /path/to/pwd/
git repository: /repo/path/.git/
Run Code Online (Sandbox Code Playgroud)
我想从源头做一个git pull,但不改变我当前的目录.
为了澄清一点,如果我不够清楚,这是我想要的结果,但我想用一个命令而不是必须更改目录:
$ cd /repo/path
$ git pull origin master
$ cd -
Run Code Online (Sandbox Code Playgroud) 如何git commit -m '...'从另一个目录运行命令?
我编辑我的文件:
vim /home/.../myFile
Run Code Online (Sandbox Code Playgroud)
我使用以下方法添加:
git add /home/.../myFile
Run Code Online (Sandbox Code Playgroud)
但是现在,我该怎样才能提交修改?
git commit -m '...' ???
Run Code Online (Sandbox Code Playgroud) 我可以在存储库文件夹中运行以下命令的存储库路径(就像这里建议的那样):
git config --get remote.origin.url
Run Code Online (Sandbox Code Playgroud)
如何使用绝对路径获取git存储库URL?
假设我在另一个文件夹中,并且我想使用绝对路径从另一个文件夹获取存储库URL.
我尝试过这个,但是没有用.
git config --get remote.origin.url --path /home/username/myFolder
Run Code Online (Sandbox Code Playgroud) 我想在git中添加和提交一个文件而不更改我当前的工作目录.这可能吗?
> pwd
/tmp
> git --git-dir=/tmp/git_test/.git init
Initialized empty Git repository in /tmp/git_test/.git/
> ls /tmp/git_test
commit1
> git --git-dir=/tmp/git_test/.git add /tmp/git_test/commit1
fatal: '/tmp/git_test/commit1' is outside repository
> git --git-dir=/tmp/git_test/.git add commit1
fatal: pathspec 'commit1' did not match any files
Run Code Online (Sandbox Code Playgroud)
(git add -A似乎使用当前的工作目录,而不是--git-dir的参数)
我想从git更新我现有的结账,但不在该目录内:
-sh-3.2$ pwd
/var/lib/gitolite
-sh-3.2$ git clone repositories/visits.git/
Cloning into 'visits'...
done.
-sh-3.2$ cd visits/
-sh-3.2$ git remote -v
origin /var/lib/gitolite/repositories/visits.git/ (fetch)
origin /var/lib/gitolite/repositories/visits.git/ (push)
-sh-3.2$ cd
-sh-3.2$ git --git-dir=/var/lib/gitolite/repositories/visits.git/ --work-tree=/var/lib/gitolite/visits/ pull
fatal: No remote repository specified. Please, specify either a URL or a
remote name from which new revisions should be fetched.
-sh-3.2$ cd visits/
-sh-3.2$ git pull
Already up-to-date.
-sh-3.2$ git --version
git version 1.8.2.1
-sh-3.2$
Run Code Online (Sandbox Code Playgroud)
我真的不明白git-dir和work-tree,有人可以解释我到底做错了什么?
我正在编写一个git post-receive钩子,它将克隆一个单独的repo作为部署的一部分.它将repo克隆到某个文件夹,并使用-C后续git命令中的选项将目录设置为已检出的repo的目录(如手册页中所述).
当从命令行手动运行时,钩子按预期工作,但是当钩子由git运行时(即,当接收到推送时)命令失败fatal: Not a git repository: '.'.当我换出-C了--git-dir它的工作原理.
这很容易重现,创建一个裸仓库git init --bare并使用内容创建一个可执行钩子:
#!/bin/bash
set -xe
SOME_REPO_URL=???? # Some repo that is not this one
repopath=/tmp/somerepo
git clone $SOME_REPO_URL $repopath
# 1: This fails when run through the git hook
git -C $repopath checkout -b somebranch HEAD~1
# 2: This works every time
# git --git-dir $repopath/.git checkout -b somebranch HEAD~1
Run Code Online (Sandbox Code Playgroud)
从命令行运行脚本将按预期工作,但是当您推送到repo时,挂钩将失败.在两种情况下,评论1和取消评论2都有效.
我找不到任何表明这是预期行为的文档 - 我将不胜感激.
这是Ubuntu …
在Git的钩子脚本中,我试图运行这样的命令..
请参考(git --git-dir未按预期工作)
git log --name-status --git-dir="C:\Documents and Settings\user\My Documents\Visual Studio 2008\Projects\CMS\.git" --work-tree="C:\Documents and Settings\user\My Documents\Visual Studio 2008\Projects\CMS"
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时,我收到以下错误.
fatal: Not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)
我使用的命令有什么问题吗?
我想编写一个批处理文件来运行git add,git commit并git push在我的机器上的一堆存储库上运行,这样我就不必每次都手动执行。git 命令有目录路径参数吗?