Почему команда "git fetch -p" возвращает ту же ветку, что и удаленная, и новую ветку одновременно? - PullRequest
1 голос
/ 14 февраля 2020

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

Каждый раз, когда я делаю git fetch -p, я получаю ветку [deleted] и [new branch] и единственная разница - заглавная буква перед названием ветви, как показано в примере ниже:

λ git checkout development && git pull origin development && git fetch -p
Switched to branch 'development'
Your branch is up to date with 'origin/development'.
From github.com:ers/case
 * branch              development -> FETCH_HEAD
Already up to date.
From github.com:ers/case
 - [deleted]           (none)     -> origin/hotfix/DISPUTELAB-4991
 * [new branch]        Hotfix/DISPUTELAB-4991 -> origin/Hotfix/DISPUTELAB-4991

Вот результат команды git config --list:

λ git config --list                                                                                                                               
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt                                                                               
http.sslbackend=openssl                                                                                                                           
diff.astextplain.textconv=astextplain                                                                                                             
filter.lfs.clean=git-lfs clean -- %f                                                                                                              
filter.lfs.smudge=git-lfs smudge -- %f                                                                                                            
filter.lfs.process=git-lfs filter-process                                                                                                         
filter.lfs.required=true                                                                                                                          
credential.helper=manager                                                                                                                         
core.editor=nano.exe                                                                                                                              
core.autocrlf=true                                                                                                                                
core.fscache=true                                                                                                                                 
core.symlinks=false                                                                                                                               
core.autocrlf=true                                                                                                                                
winupdater.recentlyseenversion=2.23.0.windows.1                                                                                                   
user.name=reypm                                                                                                                              
user.email=<********>
alias.l=log --pretty=format:%C(yellow)%h\ %ad%Cred%d\ %Creset%s%Cblue\ [%cn] --decorate --date=short                                              
alias.lg='git log --graph --oneline --decorate --all'                                                                                             
alias.a=add                                                                                                                                       
alias.ap=add -p                                                                                                                                   
alias.aa=add .                                                                                                                                    
alias.ac=!git add -A && git commit -m                                                                                                             
alias.c=commit --verbose                                                                                                                          
alias.ca=commit -a --verbose                                                                                                                      
alias.cm=commit -m                                                                                                                                
alias.cam=commit -a -m                                                                                                                            
alias.m=commit --amend --verbose                                                                                                                  
alias.d=diff                                                                                                                                      
alias.ds=diff --stat                                                                                                                              
alias.dc=diff --cached                                                                                                                            
alias.a=add                                                                                                                                       
alias.ap=add -p                                                                                                                                   
alias.aa=add .                                                                                                                                    
alias.c=commit --verbose                                                                                                                          
alias.ca=commit -a --verbose                                                                                                                      
alias.cm=commit -m                                                                                                                                
alias.cam=commit -a -m                                                                                                                            
alias.m=commit --amend --verbose                                                                                                                  
alias.d=diff                                                                                                                                      
alias.ds=diff --stat                                                                                                                              
alias.dc=diff --cached                                                                                                                            
alias.s=status -s                                                                                                                                 
alias.co=checkout                                                                                                                                 
alias.cob=checkout -b                                                                                                                             
alias.b=!git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'  
alias.la=!git config -l | grep alias | cut -c 7-                                                                                                  
commit.gpgsign=false                                                                                                                              
gui.pruneduringfetch=true                                                                                                                         
smartgit.submodule.fetchalways=true                                                                                                               
smartgit.submodule.update=true                                                                                                                    
smartgit.submodule.initializenew=true                                                                                                             
push.recursesubmodules=check                                                                                                                      
core.repositoryformatversion=0                                                                                                                    
core.filemode=false                                                                                                                               
core.bare=false                                                                                                                                   
core.logallrefupdates=true                                                                                                                        
core.symlinks=false                                                                                                                               
core.ignorecase=true                                                                                                                              
remote.origin.url=git@github.com:ers/case.git                                                                                   
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*                                                                                           
user.name=reypm                                                                                                                                 
user.email=<******>
branch.development.remote=origin                                                                                                                  
branch.development.merge=refs/heads/development                                                                                                   
branch.master.remote=origin                                                                                                                       
branch.master.merge=refs/heads/master                                                                                                             
gitflow.branch.master=master                                                                                                                      
gitflow.branch.develop=development                                                                                                                
gitflow.prefix.feature=feature/                                                                                                                   
gitflow.prefix.bugfix=bugfix/                                                                                                                     
gitflow.prefix.release=release/                                                                                                                   
gitflow.prefix.hotfix=hotfix/                                                                                                                     
gitflow.prefix.support=support/                                                                                                                   
gitflow.prefix.versiontag=                                                                                                                        
gitflow.path.hooks=D:/dev/docker/case/.git/hooks

Кроме того к тому, что я сказал прежде, я должен сказать, что я использую Git от Windows.

Я также замечаю core.ignorecase=true, но я не уверен, что будет, если я изменю это на false или если я должен оставьте это как истину, так как я нахожусь в Windows, и это, как известно, проблематично c с именами файлов и т. д.

Как забавный факт, удаленные ветви с заглавной буквой не существуют в источнике:

λ git fetch -p                                                                                                         
From github.com:ers/case
 - [deleted]             (none)     -> origin/Hotfix/DISPUTELAB-4991                
 * [new branch]          hotfix/DISPUTELAB-4991  -> origin/hotfix/DISPUTELAB-4991   

λ git branch -r | grep DISPUTELAB-4991                                              
  origin/hotfix/DISPUTELAB-4991     

Кто-нибудь видит там что-нибудь, ведущее к этой "проблеме"? Я полностью потерян на этом.

1 Ответ

1 голос
/ 14 февраля 2020

origin/hotfix/DISPUTELAB-4991 явно полностью отличается от origin/Hotfix/DISPUTELAB-4991, так же как Poli sh и poli sh - два совершенно разных слова. 1

Git понимает этот факт и обрабатывает его правильно. С другой стороны, ваша ОС настаивает на том, чтобы hotfix и Hotfix были одинаковыми . Таким образом, вы получаете странность в этом случае.

Git иногда хранит эти имена в текстовом файле, где они различаются, как это хотели бы Линус Торвальдс и Git. Но иногда Git сохраняет эти имена в именах папок и файлов на диске, и тогда они становятся одинаковыми. Параметр core.ignorecase не поможет по двум причинам:

  1. Он является чисто информативным: он сообщает Git о вашей системе, но фактически ничего не меняет Git делает с именами файлов. (Вероятно, должно, но не так.)
  2. Он используется только для файлов, извлеченных из коммитов в ваше рабочее дерево, а не для имен веток, имен тегов, имен удаленного отслеживания и других подобных ссылок.

Git нуждается - и постепенно растет 2 - в этих случаях улучшается обработка имен файлов внутри репозиториев. Это также крайне необходимо, но не получения, лучшая обработка имен веток и других ссылок. Из-за этой второй проблемы лучше всего использовать все строчные буквы для all ответвления, тега и других имен. Просто притворитесь, что заглавных букв не существует: избегайте этого, и вы никогда не обнаружите, что Git ведет себя странно в системах со сгибом.


1 Предложение "Poli sh человек наносит обувь poli sh "имеет смысл; вариант с «ботинком Poli sh для мужчин» Poli sh »в последний момент исчезает. : -)

2 Это связано с текущими разреженными проверочными работами. Это один из способов решения этой проблемы, который обобщает другие проблемы, с которыми мы сталкиваемся, например, при использовании Git как на Linux, так и на MacOS, с настойчивостью MacOS в нормализации имен файлов, таких как schön, хотя я думаю, что до сих пор это не так. действительно совершенно верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...