2017-06-06 107 views
0

我希望Mercurial列出所有被認爲是符號鏈接的追溯文件。我可以在的工作副本中獲得跟蹤的符號鏈接列表,但不會捕獲工作副本中不符合鏈接的跟蹤符號鏈接。如何讓Mercurial列出跟蹤爲符號鏈接的所有跟蹤文件?

我想要的是一個命令,它查看清單中跟蹤文件的屬性,並告訴我symlink位是否設置。我試過使用hg manifest -v,文檔中提到"print file permissions, symlink and executable bits"。我試過了,但符號鏈接與可執行位設置的非鏈接文件沒有區別。我得到很多:

755 * path/to/file 

如果我嘗試使用領先指標(hg manifest -v | grep '755 *'),我想列出的文件,但我也得到很多誤報。

背景:添加並提交符號鏈接似乎對我們有效,但Mercurial拒絕在其他人提取這些變更集時創建符號鏈接。我明白爲什麼Mercurial拒絕:我們與an undocumented rule發生衝突。所以現在我們最終得到符號鏈接應該是的文件,並且文件的內容是符號鏈接應該指向的路徑。如果我能讓Mercurial告訴我哪些文件應該是符號鏈接,我可以輕鬆地用相應的鏈接替換這些文件。

謝謝!

編輯:在我的倉庫,符號鏈接沒有被正確地致力於由於在客戶端中的錯誤,這就是爲什麼hg manifest -v沒有顯示提交的文件的鏈接。

回答

0

要評估哪些文件從符號鏈接更改爲「正常文件」,您可以嘗試在其上添加一些bash,並比較修改版本和未修改版本的文件集的輸出。也許像

diff <(hg files "set:symlink()" -r.) <(hg files "set:symlink()") 

例子:

在加入腦電圖鏈接庫,foo22鏈接改成普通文件和Foo編輯(和Foo鏈路保持指向它):

$ hg diff 
diff --git a/eeg-link b/eeg-link 
new file mode 120000 
--- /dev/null 
+++ b/eeg-link 
@@ -0,0 +1,1 @@ 
+eeg 
\ No newline at end of file 
diff --git a/foo b/foo 
--- a/foo 
+++ b/foo 
@@ -1,2 +1,3 @@ 
foo is boo! 
And this change, too! 
+And even this. 
diff --git a/foo22-link b/foo22-link 
old mode 120000 
new mode 100644 
--- a/foo22-link 
+++ b/foo22-link 
@@ -1,1 +1,1 @@ 
-foo22 
\ No newline at end of file 
+This is no symlink anymore 

我們得到的

$ diff <(hg files "set:symlink()" -r.) <(hg files "set:symlink()") 
0a1 
> eeg-link 
2d2 
< foo22-link 

顯示新添加的符號鏈接一個很好的和乾淨的輸出(EEG鏈接)和刪除的符號鏈接(foo22-link)。

+0

謝謝!您的解決方案對於用戶有意更改文件並希望查看更改的存儲庫非常有用。今天早上我發現我的問題實際上是GUI工具不正確地添加/提交文件,意思是「set:symlink」永遠不會看到它們。 –

1

我已經學到了一些東西,我不是問正確的問題,但我們得到了足夠接近的答案出來的第一方式:

hg manifest -v | grep ' @ '

警告:我會猜測清單可能會在權限編號和路徑之間放置多個符號,因此如果文件上有一組奇怪的位,' @ '作爲grep表達式可能無法完美工作。我需要@附近的空格,因爲我們的存儲庫中有許多文件名爲@

故事的其餘部分:一些實驗後,我能夠確定一個特定的水銀GUI(SourceTree)沒有提交正確的新符號鏈接,這竟然是一個longstanding issue with the Mac version。我創建了一個新的回購(hg init),並通過命令行hg添加/提交了一個目標文件和一個符號鏈接(Link\link.txt)。然後我用SourceTree添加/提交了第二個符號鏈接(Link\STlink.txt)。 hg manifest -v顯示的鏈接不是由不同客戶一視同仁:

755 * Link/STlink.txt 
644 @ Link/link.txt 
644 Target/target.txt 

如果我克隆了一個回購協議,即使有SourceTree,該Link/link.txt符號鏈接,可以完美再現,但Link\STlink.txt鏈接不。因此,對我來說真正的解決方法是用鏈接替換所有文件,並從命令行再次提交,並嘗試記住將來不要再使用SourceTree來提交新的符號鏈接。