2016-03-04 4 views
1

Моя команда разработчиков недавно перешел из SVN на Git и у меня возникают некоторые проблемы, например:Файлы потеряли в мерзавца

Я ищу для Java файл, который определяет пакет «com.acme.service.filter "(потому что maven говорит, что пакет не существует). Быстрый поиск говорит мне Maven прав:

$ find . -name '*.java' -exec grep -Hn 'package.*com.acme.service.filter' '{}' \; 
$ 

Так что я хотел бы узнать, в какой отрасли я мог бы найти такой файл, после некоторого чтения я прибегал к:

$ git grep 'package.*com.acme.service.filter' $(git rev-list --all) 

, который через некоторое время действительно нашел пару случаев:

f1b183d1cc1ee43a16621a812ff0c924f4aa45d7:xxxxxxx/src/main/java/com/acme/service/filter/SomeFilter.java:package com.acme.service.filter; 

и другие, которые отличаются только хешем.

Команда мерзавец

$ git branch -a --contains f1b183d1cc1ee43a16621a812ff0c924f4aa45d7 
* development 
    remotes/origin/development 

говорит мне, что

1) Файл содержится в местном филиале «развития» и в удаленном филиале «происхождения/развития» 2) Я проверил (звездочка)

Так почему же я не могу найти файл? Может ли кто-нибудь сказать мне, что мне не хватает?

+2

Возможно, после этого один из них удалил строку или файл. –

ответ

1

matti, вероятно, прав.

Вы можете сделать что-то вроде:

git log -- src/main/java/com/acme/service/filter/ 

видеть только коммиты, которые включают указанную директорию (даже если путь больше не существует)

3

Хэши вы получили от git grep '<pattern>' $(git rev-list --all) важны. Это не контрольные суммы найденных файлов. Это идентификаторы коммитов, в которых именованные файлы соответствуют вашему шаблону.

Затем вы используете такой идентификатор фиксации, что и аргумент git branch -a --contains. Из git branch documentation (курсива):

[--contains <commit>] показывает только те ветви, которые содержат названное обязательство (другие слова, ветви которых наконечник совершает являются потомками именованных совершает).

Так что вы получаете ветви, которые фиксируют f1b183d1cc1ee43a16621a812ff0c924f4aa45d7 в своей истории. Это не значит, что в их советах есть все файлы f1b183d1cc1ee43a16621a812ff0c924f4aa45d7. («Наконечник» филиала является его «последним» совершить: Тот, который не имеет каких-либо потомков своих, пока.)

Если вы хотите восстановить файл в с содержанием он имел в f1b183d1cc1ee43a16621a812ff0c924f4aa45d7 , попробуйте:

git checkout f1b183d1cc1ee43a16621a812ff0c924f4aa45d7 -- xxxxxxx/src/main/java/com/acme/service/filter/SomeFilter.java 

это воскресит файл и добавить его в промежуточной области GIT (иначе «индекс»).

Смежные вопросы