2015-12-21 2 views
0

Что произойдет, если я удалю HEAD и FETCH_HEAD под каталогом .git?Что произойдет, если я удалю HEAD и FETCH_HEAD под .git

Я удалил эти файлы и внес некоторые изменения в README.txt попытался вытащить и нажать (без создания каких-либо ветвей). Он работал нормально.
Будет ли это создавать проблемы, если я буду делать более серьезные вещи? как перезагрузка и сброс?

Как Git сохраняет треки, на которых работает текущая ветка, над которой я работаю? Я думал, что HEAD и FETCH_HEAD должны обозначать эти вещи. Каковы все файлы и каталоги под .git, которые я могу удалить, и все еще git продолжит работу?

Другими словами, что является основными существенными вещами под .git, необходимо, чтобы git работал локально и с удаленным безупречным?

$ pwd 
/home/arulmozhi/_/remote-repo/.git 
$ rm HEAD 
$ cd .. 
$ git pull 
Already up-to-date. 

$ cat README.md 
this stuff is from dummy branch 
First file in repo which is to be synced across multiple remotes - gitlab and github 

$ emacs -nw README.md 

$ git commit -am "what happens when we rename/delete .git/HEAD" 
[master 34d647b] what happens when we rename/delete .git/HEAD 
1 file changed, 2 insertions(+), 1 deletion(-) 

$ git status 
On branch master 
Your branch is ahead of 'origin/master' by 1 commit. 
    (use "git push" to publish your local commits) 

nothing to commit, working directory clean 

$ git push 
Counting objects: 7, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (4/4), 401 bytes | 0 bytes/s, done. 
Total 4 (delta 2), reused 0 (delta 0) 
To [email protected]:remote-repo/remote-repo.git 
    fa76250..34d647b master -> master 

$ uname -arn 
Linux koparakesari 3.19.0-31-generiC#36~14.04.1-Ubuntu SMP Thu Oct 8 10:21:08 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 
$ ls -1 .git 
branches 
COMMIT_EDITMSG 
config 
description 
hooks 
index 
info 
logs 
objects 
packed-refs 
refs 
+3

Если вы хотите, чтобы все работало безупречно, предположите, что вы не должны прикасаться к '.git' себе. Любой ответ, который полностью документирует результаты любых изменений вручную, слишком широк для переполнения стека. – chepner

+0

Это означает, что вы должны иметь другую папку .git в '/ home/arulmozhi/_' или'/home/arulmozhi': папка 'remote-repo' может быть вложенным git-репо. – VonC

ответ

0

Я просто удалил HEAD, и это было "создать проблемы" (мерзавец 2.6.4):

C:\Users\VonC\prog\git\test>rm .git\HEAD 

C:\Users\VonC\prog\git\test>git st 
fatal: Not a git repository (or any of the parent directories): .git 

Я должен был восстановить содержание ГОЛОВЫ (ref: refs/heads/master), чтобы для репо будет снова признано.

FETCH_HEAD, с другой стороны, регенерируется в следующем git fetch.

+0

В Ubuntu это не создавало проблемы ... – vanangamudi

+0

@vanangamudi Если вы удалите 'HEAD', у вас больше нет репозитория git (по определению). Является ли это проблемой или нет, я полагаю, остается за читателем. –

0

В Ubuntu:

$ git init 
Initialized empty Git repository in /test/.git/ 
$ git status 
On branch master 
... 
$ rm .git/HEAD 
$ git status 
fatal: Not a git repository (or any parent up to mount point /home) 
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). 

Таким образом, по-видимому, там было что-то другое в вашем тесте, который не может быть воспроизведен.

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