2016-03-08 31 views
22

Ho aggiornato Git alla versione 2.7.2.windows.1 (utilizzo Windows 7 a 64 bit). Dall'aggiornamento, non sono stato in grado di eseguire git add con l'opzione -p su file all'interno di una determinata directory (o delle sue sottodirectory) il cui nome è _ (un trattino basso).Impossibile utilizzare git add con l'opzione --patch

git status segnala correttamente che il mio file ha modifiche:

PS C:\Users\Carl\www\dl> git status 
On branch develop 
Your branch is up-to-date with 'origin/develop'. 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

     modified: _/php/class.Menu.php 

E posso aggiungere l'intero file con un semplice git add, o specificando il file per nome. Ma se cerco di includere l'opzione -p o --patch (entrambe le varianti producono gli stessi risultati), Git riferisce che non ci sono cambiamenti:

PS C:\Users\Carl\www\dl> git add -p .\_\php\class.Menu.php 
No changes. 

Questo accade solo per i file all'interno della directory _, ma non è così importa se I cd in quella directory per eseguire il comando git add senza dover specificare esplicitamente un percorso con un trattino basso in esso; che ancora non funziona:

PS C:\Users\Carl\www\dl\_\php> git add -p .\class.Menu.php 
No changes. 

mi aveva inizialmente pensato che questo problema era legato a uno simile che ho incontrato di recente sui file all'interno della directory _, which I asked about here. Tuttavia, sembra che il problema sia stato correlato alla conversione del percorso Posix in MinGW, mentre questo problema si verifica sia che io utilizzi Git Bash, Windows PowerShell o cmd.exe.

Come ho detto in quella domanda precedente, credo che i caratteri di sottolineatura siano validi nei nomi di file/directory. Inoltre, non sono il proprietario del progetto, quindi non posso rinominare la directory o spostare il file.

Si tratta di un bug in Git? Ci sono ulteriori misure che posso prendere per determinare qual è il problema di fondo?

+0

Sei uscito da un impegno o una filiale? –

+0

No, questo non è un nuovo file. È un file già esistente nel repository a cui ho semplicemente apportato delle modifiche. –

+0

sei uscito con un solo commit? Nella mia esperienza, ciò può portare a comportamenti strani su cui lavorare. –

risposta

14

Bene, sono stato in grado di riprodurlo e sembra che sia la stessa conversione del percorso da POSIX a Windows. ProcessMonitor mostra che git (in realtà, perl eseguito da git) cerca un file C:\Program Files\Git\php\class.Menu.php.

di lavorare in questo giro (almeno, che ha lavorato per me), secondo documentation, è possibile impostare la variabile di ambiente MSYS_NO_PATHCONV temporaneamente, in questo modo (in git bash):

MSYS_NO_PATHCONV=1 git add -p _/php/class.Menu.php 

(I don' t sapere come impostare le variabili env a finestre cmd/PowerShell, ma che dovrebbe essere possibile, anche.)

Si consiglia di non abilitare MSYS_NO_PATHCONV a livello globale/permanentemente (ad esempio utilizzando export in git bash o la modifica di finestre utente/variabili di sistema in s impostazioni di ystem), perché ciò può portare a effetti indesiderati e probabilmente creerà molte più cose di quanto non risolverà (vedi this SO comment). In realtà, git-windows gente warn contro l'attivazione temporanea anche MSYS_NO_PATHCONV.
Detto questo, sto iniziando a pensare che il problema di OP sia un bug di git-for-windows e debba essere riportato come tale (potrebbe avere qualcosa a che fare con il fatto che git-add è un binario, ma git-add--interactive è un perl script).

Un'altra soluzione elencati è quello di raddoppiare la prima barra, come git add -p _//php/class.Menu.php (o vuol dire il parametro deve iniziare con una doppia barra?), Ma questo non sembra funzionare a causa di complesse conversioni percorso intermedi, che questo accada tra l'invocazione di git add e l'accesso al file reale.

+0

Per impostare le variabili env in windows 'cmd: 'imposta MSYS_NO_PATHCONV = 1' –

+1

@StijndeWitt oppure apri il Pannello di controllo> Sistema> Impostazioni di sistema avanzate> Variabili d'ambiente, in particolare se devi impostare qualcosa per tutti gli utenti e non solo il tuo utente corrente . – GalacticCowboy

+0

@GalacticCowboy Ricorda che le modifiche alle variabili di ambiente nel pannello di controllo non vengono visualizzate altrove fino a dopo un riavvio. –

2

Proverei senza quello .. Inoltre non ho mai passato un nome di file a git add -p. Ho appena fatto il mio cambiamento e l'ho eseguito così com'è. Vorrei anche verificare che tutte le modifiche che stai apportando vengano effettivamente applicate a quel file specifico e che il file venga toccato.

+0

PowerShell aggiunge automaticamente '. \' Quando si completa il percorso di una scheda. Ma i risultati sono uguali in entrambi i casi - Git riferisce che non ci sono "cambiamenti" quando sono chiaramente disponibili. –

+0

'git add -p', senza specificare il nome del file, non fa nulla. Non produce output e riporta semplicemente il prompt. Niente è in scena. –

+0

@ChristianGrabowski, sia in Git Bash che in cmd.exe, i risultati sono gli stessi: 'git add -p' non produce alcun output. –