2014-10-07 40 views
3

摘要:通過git別名運行的命令的當前工作目錄是錯誤的。git別名在錯誤的目錄中操作

證明這一點最簡單的方法是有一個git的別名,就像這樣:

[alias] 
    pwd = !pwd 

所以git pwd只是運行bash命令pwd。人們會認爲這兩個命令的輸出是相同的。現在,讓我們嘗試了這一點幾次:

$ cd ~ 
$ pwd && git pwd 
/home/limpchimp 
/home/limpchimp # great! 
$ mkdir foo && cd foo && git init 
Initialized empty Git repository in /home/limpchimp/foo/.git/ 
$ pwd && git pwd 
/home/limpchimp/foo 
/home/limpchimp/foo # great! 
$ mkdir bar && cd bar 
$ pwd && git pwd 
/home/limpchimp/foo/bar 
/home/limpchimp/foo # uuhhhhhhhh...? 

看來,Git是改變當前的工作目錄是具有.git文件夾中的第一個父目錄(如果存在的話)。這是非常有問題的;它搞砸了我編寫的某些腳本,這些腳本是爲了在特定目錄中運行,並且使我無法將某些事情用作git別名。有沒有解決的辦法?我該如何解決它?

+1

[如git的別名給出不同的結果爲什麼會運行命令?(HTTP的可能的複製爲退貨://計算器.COM /問題/ 8832799 /爲什麼 - 不運行命令-AS-git的別名給-不同-結果) – 2016-04-07 12:53:41

回答

6

這是在文檔中使用,如果需要的解決方法沿着明確規定由設計。

Git Config Alias

注意,外殼命令將從存儲庫,它可能不一定是當前目錄的頂級目錄 被執行。 GIT_PREFIX設置運行git REV-解析 - 顯示,前綴從原來的當前目錄

2

這是一個(誤?)功能,但你可以解決它與$GIT_PREFIXthis other stackoverflow question and answer指出:

#! /bin/sh 
# script to do stuff in a git dir 
# since we're sometimes run from a git alias we need 
# to cd back into $GIT_PREFIX if it's set 
[ "$GIT_PREFIX" != "" ] && cd "$GIT_PREFIX" 
... rest of script ...