Access Branch с неиспользуемыми файлами [duplicate]

В основном вам придется постоянно опробовать сервер для изменений в БД. Сервер не может позвонить клиенту, поэтому клиенту просто нужно постоянно спрашивать сервер, были ли изменения.

937
задан svick 20 November 2012 в 13:27
поделиться

11 ответов

Обновление 17 мая 2018 года:

В новых версиях git теперь есть git stash --all, который застревает все файлы, включая невоспроизводимые и проигнорированные файлы. git stash --include-untracked больше не касается игнорируемых файлов (проверено на git 2.16.2).

Оригинальный ответ ниже:

Предупреждение. Выполнение этого будет навсегда удалять ваши файлы, если у вас есть любые записи каталога / * в вашем файле gitignore.

Начиная с версии 1.7.7 вы можете использовать git stash --include-untracked или git stash save -u для хранения ненужных файлов без их постановки.

Добавьте (git add) файл и начните его отслеживать. Тогда засуньте. Поскольку все содержимое файла является новым, они будут спрятаны, и вы сможете манипулировать им по мере необходимости.

1192
ответ дан unode 16 August 2018 в 04:41
поделиться
  • 1
    Почему stash still stash изменяет существующие файлы, даже если эти изменения не были поставлены? – Alan Christensen 9 June 2011 в 04:22
  • 2
    @ alan-christensen Прочтите ОПИСАНИЕ kernel.org/pub/software/scm/git/docs/git-stash.html . Дело в том, чтобы иметь чистое рабочее дерево после укладки. – Kelvin 16 August 2011 в 20:44
  • 3
    @ alan-christensen, когда вы сказали «изменили существующие файлы ... которые не были поставлены». Я воспринял это как файлы, которые были сделаны ранее, а затем изменены, но не были добавлены в индекс. Если вы имели в виду неохраняемые файлы, то, возможно, вы хотели спросить & quot; Почему не & quot; вместо «Почему это». – Kelvin 28 August 2011 в 14:35
  • 4
    @Kelvin, что я имел в виду в своем комментарии, заключался в том, что он не зашивает новые файлы, если они не были поставлены, но он хранит существующие файлы, даже если они не были поставлены. Мне кажется непоследовательным. – Alan Christensen 29 August 2011 в 02:33
  • 5
    @AlanChristensen - это то, что может быть перезаписано проверкой другой ветви. – jwg 4 January 2013 в 17:07

Начиная с git 1.7.7, git stash принимает параметр --include-untracked (или короткий -u). Чтобы включить неиспользуемые файлы в ваш кошелек, используйте одну из следующих команд:

git stash --include-untracked
git stash -u

Предупреждение. Выполнение этого будет навсегда удалять ваши файлы, если у вас есть какие-либо записи каталога / * в файле gitignore.

351
ответ дан Antimony 16 August 2018 в 04:41
поделиться
  • 1
    Cool - он, наконец, работает так, как описано на странице руководства. Не стирание (и очистка) новых файлов нарушено. – Steve Bennett 20 February 2012 в 08:14
  • 2
    моя версия git равна 1.9.1, и даже если то, что у меня в .gitignore выглядит так ignoredDirectory, а не ignoredDirectory/*, оно по-прежнему удаляет те, которые не отслеживаются. Даже не проверенные файлы не только каталоги. – theUnknown777 13 April 2015 в 10:01
  • 3
    Не могли бы вы объяснить это предупреждение? Зачем это удалять эти файлы? Удаляет ли их их и не застревает? Я использовал Git некоторое время и не сталкивался с этой проблемой. – Aleksandr Dubinsky 26 October 2015 в 22:10
  • 4
    Применяется ли предупреждение к записи *.extension? – arekolek 8 March 2017 в 11:47
  • 5
    @ aleksandr-dubinsky, @arekolek - git 1.8.3 -u (--include-untracked) опция может сохранять и выталкивать неиспользуемые файлы в порядке, но git stash show не перечисляет неиспользуемые файлы, находящиеся в тайнике – xilef 12 May 2017 в 12:26

Я думал, что это можно решить, сообщив git, что файл существует, вместо того, чтобы передать все содержимое его в промежуточную область, а затем вызвать git stash. Araqnid описывает , как это сделать.

git add --intent-to-add path/to/untracked-file

или

git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file

Однако последнее не работает:

$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
0
ответ дан Community 16 August 2018 в 04:41
поделиться

Я привык обдумывать и желать того же. Но со временем я заметил, что это действительно не нужно. Когда вы запихиваете, все в порядке, чтобы оставить новые файлы. Ничто «плохое» не может случиться с ними (когда вы проверяете что-то еще, git будет ошибаться и не перезаписывать существующий невоспроизводимый файл)

И поскольку обычно временной интервал между git stash и git stash pop довольно мала, вам снова понадобится необработанный файл. Поэтому я бы сказал, что неудобство файла, появившегося в git status, пока вы работаете над чем-то другим (между git stash и git stash pop) меньше, чем неудобства, вызванные работой, и необходимо внимание, которое в противном случае было бы чтобы попытаться добавить неиспользуемый файл в ваш кошелек.

-6
ответ дан Dieter_be 16 August 2018 в 04:41
поделиться
  • 1
    Это зависит от проекта. Скажем, не проверенный файл является (наполовину написанным) единичным тестом, а тестовая жгута выполняет все модульные тесты в каталоге. И т.п. – Steve Bennett 20 February 2012 в 08:13
  • 2
    Еще один пример: если вы работаете на двух компьютерах, и вам разрешено перемещать данные с A на B, но не с B на A. Если вы создаете новую часть кода для решения проблемы, которая сначала возникает на B, но что вы хотите как на A, так и на B, вы хотите, чтобы иметь возможность зашифровать файл на B, чтобы при обновлении этого файла на A, а затем с его переносом в комплекте, вы можете git diff спрятанную версию, чтобы убедиться, что вы не сделать ошибку. – Gdalya 7 May 2012 в 15:53
  • 3
    Просто потому, что файл не отслеживается в одном ветви, не означает, что он не будет конфликтовать с отслеживаемым файлом в другой ветке. – jwg 14 June 2013 в 09:42
  • 4
    простой встречный пример: файл конфигурации в каталоге .conf.d или любой другой, который только изменяет поведение программного обеспечения. – fotanus 13 May 2014 в 02:45
  • 5
    Конечно, функциональность необходима. В качестве дополнительного примера невозможно переключиться с одной ветви на другую, если у вас есть локально не проверенные файлы, которые вы хотите занести. – Demitrian 26 October 2015 в 10:03

В git bash скрепление необработанных файлов достигается с помощью команды

git stash --include-untracked

или

git stash -u

http://git-scm.com / docs / git-stash

git stash удаляет любые неиспользуемые или неработающие файлы из вашей рабочей области. И вы можете вернуть git stash с помощью следующих команд:

git stash pop

Это вернет файл в локальное рабочее пространство.

Мой опыт

Мне пришлось выполните модификацию моего файла gitIgnore, чтобы избежать перемещения файлов .classpath и .project в удаленное репо. Мне не разрешено перемещать этот измененный .gitIgnore в удаленном репо.

.classpath и .project файлы важны для eclipse - это мой редактор java.

Сначала я из всех выборочно добавленных остальной части файлов и совершенных для постановки. Тем не менее, окончательный толчок не может быть выполнен, если не изменен модифицированный .gitIgnore и не проверенные файлы. .project и .classpath не спрятаны.

Я использовал

 git stash 

для записи измененного файла .gitIgnore.

Для stashing .classpath и .project file, я использовал

git stash --include-untracked

, и он удалил файлы из моего рабочего пространства. Отсутствие этих файлов убирает мою способность работать в моем рабочем месте в eclipse. Я продолжил работу с завершением процедуры перенаправления переданных файлов на удаленный. Как только это было сделано успешно, я использовал

git stash pop

. Это вставило те же файлы обратно в мое рабочее пространство. Это дало мне возможность работать над тем же проектом в затмении. Надеюсь, это отбросит заблуждения.

44
ответ дан DolphinJava 16 August 2018 в 04:41
поделиться
  • 1
    Почему вы не используете глобальный gitignore для файлов IDE? То есть. используйте ~/.gitignore. – Antti Pihlaja 5 October 2015 в 19:47

Здесь есть несколько правильных ответов, но я хотел бы указать, что для новых целых каталогов 'git add path' будет работать NOT . Поэтому, если у вас есть куча новых файлов в untracked-path и сделайте это:

git add untracked-path
git stash "temp stash"

это запишет следующим сообщением:

Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty

, и если untracked-path - единственный путь, который вы запихиваете, то при нажатии на кнопку «temp stash» будет пустой тайник. Правильный способ заключается в том, чтобы добавить весь путь, а не только имя каталога (т. Е. Конец пути с помощью «/»):

git add untracked-path/
git stash "temp stash"
1
ответ дан DrStrangepork 16 August 2018 в 04:41
поделиться
  • 1
    По крайней мере, в моей системе ваше предположение неверно. Он работает без косой черты! Пустые каталоги все равно игнорируются. (macos git 2.6.2) – phobie 5 November 2015 в 09:57

Как было сказано в другом месте, ответ на git add файл. например ::

git add path/to/untracked-file
git stash

Однако вопрос также поднят в другом ответе: что делать, если вы действительно не хотите добавлять файл? Ну, насколько я могу судить, вам нужно. И будет работать NOT :

git add -N path/to/untracked/file     # note: -N is short for --intent-to-add
git stash

это не сработает, как показано ниже:

path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

Итак, что вы можете сделать? Ну, вы должны по-настоящему добавить файл , однако , вы можете удалить его позже, с помощью git rm --cached:

git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop   # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file

И тогда вы можете продолжить работу, в том же состоянии, в котором вы были до git add (а именно, с незатремлированным файлом с именем path/to/untracked-file, а также с любыми другими изменениями, которые могли быть связаны с отслеживаемыми файлами).

Другая возможность для рабочего процесса на это будет что-то вроде:

git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack

[Примечание: как упоминалось в комментарии от @mancocapac, вы можете добавить --exclude-standard в команду git ls-files (так, git ls-files -o --exclude-standard ]).]

... который также может быть легко написан сценарием - даже псевдонимы будут выполняться (представлены в синтаксисе zsh, при необходимости настраиваются) [также, я сократил имя файла так, чтобы все это помещается на экран без прокрутки в этом ответе; не стесняйтесь подставлять альтернативное имя файла по вашему выбору]:

alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'

Обратите внимание, что последнее может быть лучше в качестве скрипта или функции оболочки, чтобы параметры предоставлялись в git stash, в случае, если вы не хотите pop, но apply и / или хотите иметь возможность указывать конкретный тираж, а не просто принимать верхний. Возможно, это (вместо второго псевдонима, выше) [пробелы разделены, чтобы они не вписывались без прокрутки; повторно добавить для повышения удобочитаемости]:

function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}

Примечание : в этой форме вам необходимо указать аргумент действия, а также идентификатор, если вы собираетесь поставлять идентификатор прошивки, например unstashall apply stash@{1} или unstashall pop stash@{1}

Что вы, конечно, поставили бы в свой .zshrc или эквивалент, чтобы существовать долговременно.

Надеюсь, этот ответ полезен кому-то, все вместе объединяет в одном ответе.

17
ответ дан lindes 16 August 2018 в 04:41
поделиться
  • 1
    git ls-files -o показывает намного больше файлов, чем те, которые меня интересуют. из следующего git status Я обнаружил, что добавление --exclude-standard работает. git ls-files -o --exclude-standard. Я беру на себя это только "включает" файлы без следа, которые вы обычно не игнорировали, т. е. показывали только невоспроизводимые файлы, ваш .gitignore не отфильтровывал бы – mancocapac 22 March 2017 в 21:38
  • 2
    Благодарю. Я добавил к этому заметку. – lindes 4 January 2018 в 07:28

Я смог спрятать только файлы без следа, выполнив:

git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}

Последний выталкивает трюк отслеженных файлов, оставляя при этом только файлы без следа.

4
ответ дан Oded 16 August 2018 в 04:41
поделиться

Вы можете просто сделать это с помощью команды

git stash save --include-untracked

или

git stash save -u

Подробнее о git stash Посетите этот пост (Нажмите здесь)

0
ответ дан shubham mishra 16 August 2018 в 04:41
поделиться

Добавьте файл в индекс:

git add path/to/untracked-file
git stash

Все содержимое индекса, а также любые неустановленные изменения в существующих файлах, все превратят его в кошелек.

56
ответ дан skiphoppy 16 August 2018 в 04:41
поделиться
  • 1
    Что делать, если вы не хотите сохранять изменения, которые уже есть в индексе? Является ли сохранение нового файла еще возможным? – allyourcode 5 December 2010 в 09:36
  • 2
    Зафиксируйте индекс, запустите новый файл, затем верните фиксацию и / или проверьте файлы из фиксации. Это простое решение, но оно должно работать. – Gdalya 7 May 2012 в 15:58
  • 3
    git add . не принимал это во внимание по какой-либо причине – TheBilTheory 14 August 2018 в 06:38

В git версии 2.8.1 следующие работы для меня.

Чтобы сохранить измененные и не проверенные файлы в тире без имени

git stash save -u

Чтобы сохранить измененные и не проверенные файлы в stash с именем

git stash save -u <name_of_stash>

Вы можете использовать любой поп и применять позже следующим образом.

git stash pop

git stash apply stash@{0}
8
ответ дан user1012513 16 August 2018 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: