Kaip galite pridėti naują failą nesukuriant?

Norint efektyviai naudoti gitą (ir, kaip ir tikėtasi), padarysiu nedidelius atominius įsipareigojimus, o turiu ilgesnes sesijas, kuriose keičiasi daugiau nei vienas dalykas. Taigi aš naudoju git add -p daug. Tačiau tai neveikia visiškai naujų failų atveju, nes aš vėliau juos pamiršiu.

Ką noriu padaryti, pasakyti git , kad yra naujas failas, noriu, kad jis stebėtų, bet nevykdytų:

Pavyzdys: „ git status priežastys:

 # On branch my-current-branch # Your branch is ahead of 'origin/my-current-branch' by 2 commits. # # Changes to be committed: # <<STAGED SECTION>> // A # # 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) # <<UNSTAGED-YET-KNOWN SECTION>> // B # # Untracked files: # (use "git add <file>..." to include in what will be committed) # <<UNKNOWN SECTION>> // C 

Jei C skyriuje turiu failą „ foo “, ir aš sakau „ git add foo , jis pereis į A skyrių. Jei sakau „ git add -N foo , jis bus „A“ ir „B“. Tačiau tai reiškia, kad jis bus įtrauktas į šiuos nustatant bent jau faktą, kad yra nauja byla.

Noriu, kad jis būtų tik B skyriuje, kad vėliau jį pridėtumėte prie git add -p arba git add foo (arba kažko kito).

Keisti

Kalbant apie „ add -N sprendimą, jis neveiks, nes jei bandysiu add -N po add -N pasakė ir nepridėjo teisingai, git skundžiasi, nes nežino, kaip tvarkyti tuščius failus:

 foo: not added yet error: Error building trees 
39
18 июня '12 в 19:32 2012-06-18 19:32 bitmaskas nustatytas birželio 18 d . 12 val. 19:32 2012-06-18 19:32
@ 3 atsakymai

Naudojant „Git 2.5“, „ git add -N/--intent-to-add yra tinkamas sprendimas.
Naujas failas nebus kito įsipareigojimo dalis.

Žr. Nguyễn Thái Ngọc Duy ( pclouds ) pclouds (kartu su d0c692263 ):

diff-lib.c : reguliuokite ita įrašų padėtį diff-lib.c

Problema:

Įrašai, kuriuos pridėjo „ git add -N “, yra naudotojo priminimas, todėl jie prisimena juos pridėti prieš įsipareigojant. Šie įrašai rodomi indekse, net jei jie nėra realūs. Jų buvimas rodyklėje sukelia painią „ git status :

 On branch master Changes to be committed: new file: foo Changes not staged for commit: modified: foo 

Jei padarysite „ git commit “, „ foo “ nebus įtraukta, nors „ status “ tai praneša kaip „ to be committed “.

Sprendimas:

Šis pleistras pakeičia rezultatą į

 On branch master Changes not staged for commit: new file: foo no changes added to commit 

Tai reiškia:

Gydykite kelius, kurie „dar nėra įtraukti į indeksą, bet Git jau žino apie juos“; „ git diff HEAD “ ir „ git diff --cached HEAD “ neturėtų kalbėti apie juos, tačiau „ git diff “ turėtų rodyti juos kaip naujus. + failai dar neįtraukti į indeksą.

15
20 мая '15 в 9:34 2015-05-20 09:34 atsakymą pateikė VonC gegužės 20, 15 d. 9:34 2015-05-20 09:34

Galbūt jūs galite pabandyti parašyti kai kuriuos iš anksto priskirtus kabliukus, įspėjančius, kad turite neapdorotų failų. Tam reikės, kad jūs visada palaikytumėte savo git katalogą (ir, žinoma, jums reikės atnaujinti atnaujintą .gitignore).

Taip pat pabandykite git add -i , kuris yra panašus į git add -p , bet taip pat turi sąsają naujų failų pridėjimui.

3
18 июня '12 в 21:09 2012-06-18 21:09 atsakymas pateikiamas birželio 18, 12 dienomis 21:09 2012-06-18 21:09

Prieš atlikdami pakeitimus, galite perkelti tuščią failą šiuo keliu. Jei jau parašėte kažką ten, perkelkite failą, padarykite tuščią failą, pataisykite, tada pridėkite „P“ kaip įprasta ir git commit --amend , kad neturėtumėte „pridėti tuščio failo“.

1
18 июня '12 в 19:35 2012-06-18 19:35 atsakymas duotas Daenythui birželio 12 d. 19:35 2012-06-18 19:35

Kiti klausimai apie „ žymes arba „ Klauskite“