master每次我打電話時,我的本地人都會拉一些分支(總是一樣的) git pull。在這些拉動之后,我嘗試git pull origin master獲取原始主資料,當我再次嘗試時,我得到了Already up to date預期的結果。但是當我git pull再次嘗試時,我不斷獲得相同的分支創作。我認為這可能是由于原產地和當地的主人不匹配造成的,所以我做了git reset --hard origin/master,git pull origin master結果Already up to date。然后我又試了一次git pull,我又得到了那些分支。
打電話后git pull我看到:
* [new branch] users/aaa -> origin/users/aaa
* [new branch] users/bbb -> origin/users/bbb
* [new branch] users/ccc -> origin/users/ccc
...
error: cannot lock ref 'refs/remotes/origin/users/ddd': is at 'hash1' but expected 'hash2'
...
* [new branch] users/eee -> origin/users/eee
...
! e7b282a57..aa76491e2 users/fff -> origin/users/fff (unable to update local ref)
...
呼叫時,git fetch --prune我得到了完全相同的結果,除了頂部還有洗掉:
- [deleted] (none) -> origin/Users/ggg/feat1
- [deleted] (none) -> origin/Users/ggg/feat2
- [deleted] (none) -> origin/Users/ggg/feat3
...(git pull result)
我嘗試過的場景:
git pull origin master-Already up to dategit pull- 每次我呼叫它時都會拉出相同的分支git reset --hard origin/master->git pull- 每次我呼叫它時都會拉出相同的分支git fetch- 結果相同git pullget fetch --prune- pulls the same branches and removes the same branches everytime I call itgit merge-Already up to dategit branch –set-upstream-to=origin/master master->git pull- same as normalgit pull
I want to call git pull to have the same result as git pull origin master and not fetch the same data over and over again.
Can anyone explain what might be the issue here?
(If anyone wants me to add a test scenario to check the result I will add it)
uj5u.com熱心網友回復:
nnoneo在評論中提出了正確的問題:
您在 Windows(或不區分大小寫的檔案系統)上嗎?您是否真的得到包含
origin/Users和origin/users(注意大小寫更改)的輸出?
Git 本身試圖完全區分大小寫。這意味著可以創建一個名為的分支fool,第二個名為的分支Fool,第三個命名的分支fooL,第四個命名的分支FOoL,以此類推。例如,在 Linux 系統上,這一切都很好。它適用于 Linux 服務器。它有時甚至可以在設定為區分大小寫的標準 Windows 或 macOS 系統上作業,如果您創建一個名為 的檔案或檔案夾,則任何嘗試參考以此命名的檔案或檔案夾實際上是指到現有的,反之亦然。也就是說,如果兩個名稱組件看起來相同usersUsersusers大小寫折疊后,檔案或檔案夾將使用您當時要求的任何一個大小寫創建,從那時起,您將無法獲得其他拼寫。
Git 目前1在不同的時間 將分支、標簽和其他名稱2存盤在兩個不同的地方:
- 分支名稱可能顯示為單行條目
.git/packed-refs(該行包含分支名稱和哈希 ID)。 - 該名稱可以轉換為檔案名并作為
.git作業系統提供的檔案存盤在目錄中:例如,分支的哈希 ID 值可能存盤在.main.git/refs/heads/main
如果兩個名稱都存在,Git 具有作業系統提供的檔案條目覆寫,因此如果我們有一個.git/packed-refs包含該行:
dcc0cd074f0c639a0df20461a301af6d45bd582e refs/heads/master
并且a.git/refs/heads/main包含一些其他哈希 ID,另一個哈希 ID 是您的分支main所指的哈希 ID。
現在,假設您正在克隆并稍后使用 with 的源存盤庫git fetch在某個時候有一個名為的分支users/joe和一個名為Users/joe. 該源存盤庫存盤在 Linux 系統上,或者可能偶然總是使用該packed-refs檔案。
當您運行git cloneorgit fetch時,您自己的 Git 存盤庫可能會創建或更新.git/refs/remotes/users/joe和/或.git/refs/remotes/Users/joe. 如果您自己在 Linux 系統上,這將作業得很好:您現在有兩個不同的遠程跟蹤名稱,用于兩個不同的分支名稱。但是,如果您使用不區分大小寫的 macOS 或 Windows 卷,并且您的 Git 軟體嘗試執行此操作,它將僅創建兩個名稱中的一個,然后將現有檔案重新用于另一個名稱。
這正是導致您的問題的場景。如果您的 Git 存盤庫只有打包的refs,那么一切都會奏效。如果上游存盤庫首先修復了大小寫混淆,以便所有名稱都是users/<name>并且您git pack-refs --all用來打包所有 refs,擺脫 的內容.git/refs以清除任何剩余的垃圾,然后運行git fetch --prune,問題就會消失。但第一步是在origin.
似乎版本控制分支命名策略中有這樣的策略,有些人正在創建
users檔案夾和一些Users.
他們需要停止這樣做。
Users奇怪的是,在 Azure DevOps 中,我在分支串列中看不到帶有 [capital-U] 的檔案夾......
Azure DevOps has an add-on, not part of standard (C) Git, for dealing with related case issues. See, e.g., Azure Devops Git branch case sensitivity (which is about file name case issues). For branch and tag name issues see also the Azure online documentation.
1There is ongoing work to fix this, but it's not available in plain Git yet. Once it is, switching to the "reftables" back end will make this problem go away.
2All of these names in Git coexist by virtue of namespaces. A branch name is any name that starts with refs/heads/: for instance, branch main is really refs/heads/main. A tag name is any name that starts with refs/tags/: for instance, tag v2.1 is really refs/tags/v2.1. A remote-tracking name—a name where your own Git stores its renamed variant of some other Git repository's branch name—begins with refs/remotes/ and goes on to include the name of the remote, hence refs/remotes/origin/ for remote origin. After that comes the branch name as seen on the remote, i.e., the name with refs/heads/ stripped. This is how some other Git repository's main winds up stored in your Git repository as refs/remotes/origin/main.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/441097.html
標籤:git
上一篇:GitHub不允許我推送到遠程檔案夾(在Xcode中)
下一篇:Git使用了錯誤的SSH密鑰
