2009-09-06 11 views
176

私は私が私よりも別のディレクトリからのgitを実行しようとしていますが期待通りに動作していないので、例えば私が午前場合:。のgit --git-dirが

cd /home/domain/ 
git status << runs perfect ie 
# On branch master 
# Your branch is ahead of 'origin/master' by 6 commits. 

だから今、私はこれを実行したいですコマンドを--git-dirオプションを使用して別のディレクトリから削除します。

は、だから私はroot/中だと言うと、これを試すことができます:

git --git-dir="/home/domain/" status 
## Error 
fatal: Not a git repository: '/home/domain/' 

私も

git --git-dir="/home/domain/.git/" status 

すなわち.gitフォルダが含まれるようにしようとしました。しかし、gitのを実行しようとしているように、これが見えますつまり、私のドメインフォルダからすべてを削除し、すべてをルートに追加します。

誰かが私が間違っていることについて助言してくれることを願っています。

+4

は今、私は完璧な状態働いてしまったが、プルが与えていますエラー。 root @ erx [/]#git --git-dir =/home/domain/.git --work-tree =/home/domain /元のマスタをプル 致命的:/ usr/local/libexec/git-core/git-pullは、作業ツリーなしでは使用できません。 ステータスは正常に動作しますか? 任意のアイデアJon – Lee

+4

これはgitの最大のバグです。 --work-treeおよび/または--git-dirパラメータを無視します。 –

+3

git 1.8.5を起動すると、簡単なコマンドのために '--git-dir'と' --work-tree'を設定しない*を選択することができます:[my answer below](http:// stackoverflow。 com/a/20115678/6309) – VonC

答えて

258

作業ディレクトリも定義する必要があります。私は分かりますが、それは柔軟性です。

git --git-dir=/mycode/.git --work-tree=/mycode status 

あなたは上記のあなたのコメントに基づいてhere

+2

ありがとうございました!これは混乱していると約束した。それはKeep It Simple Stupidと呼ばれています。ほとんどの場合、柔軟性を可能にすると同時に、コマンドを実行しているVSを一番うまく動作させないデフォルトを与えることができます。 – Nay

+3

@Nickは、 '--git-dir'が指定されていないと'/mycode/.git'が存在するかどうかをチェックし、エラーを投げる前にそれを使うと思います。 – GP89

+3

@NickYeatesがセカンド!また、〜を使用してホームディレクトリを参照するときに問題が発生しました。たとえば、 'git --git-dir =〜/ src/s3cmd/.git --work-tree =〜/ src/s3cmd pull'が動作しませんでした'git --git-dir =/home/username/src/s3cmd/.git --work-tree =/home/username/src/s3cmd pull'した場合 –

38

もう少しを読むことができるあなたはまだ問題に実行されているように、それが聞こえる:

 
[email protected] [/]# git --git-dir=/home/domain/.git --work-tree=/home/domain/ pull origin master 
fatal: /usr/local/libexec/git-core/git-pull cannot be used without a working tree 

あなたがしようとする可能性があるようですねcrontabなどから実行してください。作業ディレクトリに最初に切り替える場合は、cdを使用する方がよい場合があります。たとえば、次のように

 
[email protected] [/]# (cd /home/domain && git pull origin master) 

これは一時的に(括弧は何をすべきかであるサブシェルで)/home/domainにカレントディレクトリを変更し、git pull origin masterを実行します。コマンドが完了すると、現在のディレクトリはコマンドの前にあった場所にとどまります。

+0

サブシェルの使用はシンプルでエレガントです。なぜ私はそれを前に考えなかったのか分かりません! –

+0

申し訳ありません@Greg、Jonの質問に答えたので、Jonによって他の回答を票に入れました - しかし、私はあなたが志望とあなたの洞察、すなわち()sを見つけて答えることにスポットを当てていると思います。 –

96

git 1.8.5は(アウト来週であるべきである)、それがさらに簡単になります開始:

git -C "/home/domain/" status 

もう--git-dir--work-treeを設定する必要はありませんが!


Nazri Ramliycommit 44e1e4を参照してください:それは、現在のディレクトリを離れることなく、別のディレクトリにgitのコマンドを呼び出すために多くのキー入力を要する

  1. (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-dir=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2. (cd ../..; git grep foo)
  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

、上記に示す方法では、スクリプトのために許容可能であるが、迅速なコマンドライン呼び出しのためにあまりにも面倒です。この新しいオプションを使用すると

は、上記少ないキーストロークで行うことができます。

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done
関連する問題