Tôi đang sử dụng cả mercurial và git cho các dự án khác nhau và giống như cả hai. Những gì tôi thấy một chút khó chịu về mercurial là "trạng thái hg" cho thấy đường dẫn liên quan đến gốc kho, không vào thư mục hiện tại (không giống như git). Hành vi này có thể được tinh chỉnh bằng cách nào đó không?Mercurial "hg status" và đường dẫn tương đối
Trả lời
Cách giải quyết thông thường là để chạy:
hg status $(hg root)
Đối với phiên bản cũ của Mercurial, trước 1.7, bạn có thể sử dụng hack này, thêm vào ".hg/HGRC" tập tin của kho lưu trữ của bạn:
[alias]
sst = status /path/to/root
Cần mở rộng bí danh, vì vậy bạn có thể phải thêm "alias =" vào tệp ~/.hgrc của mình.
Bắt đầu với Mercurial 1.7, phần mở rộng bí danh đã tìm hiểu về "!" thoát để sử dụng các lệnh shell, vì vậy bây giờ bạn có thể có một bí danh toàn cầu mà thực hiện điều này:
[alias]
sst = !hg status $($HG root) $HG_ARGS
Không sử dụng st = !hg status $(hg root)
, vì đó tạo ra một vòng lặp vô hạn, chạy tình trạng hg hơn và hơn. Nó trông giống như một lỗi trong phân tích cú pháp alias - nếu bạn muốn bí danh hg status
để hiển thị các đường đi từ gốc, sau đó câu thần chú sau đây hoạt động trong $ toàn cầu HOME/.hgrc:
[alias]
__mystatus = status
st = !hg __mystatus $($HG root) $HG_ARGS
Cảm ơn! Thật đáng buồn là bí danh ext. không cho phép các lệnh shell vào lúc này, vì vậy, tôi sẽ đặt "hg status $ (hg root)" thành một bí danh bash thay thế. – pachanga
Ví dụ bí danh cuối cùng của bạn sẽ không chuyển sang bất kỳ tùy chọn nào về trạng thái (như --quiet). Dòng cuối cùng phải là 'st =! Hg __mystatus $ ($ HG root) $ HG_ARGS' – krupan
@krupan thanks! Tôi đã cập nhật câu trả lời với mẹo đó. Tôi hiếm khi sử dụng đối số cho trạng thái vì vậy tôi đã không gặp vấn đề. – richq
Để xem tình trạng không gian làm việc tương đối vào thư mục hiện tại, bạn luôn có thể sử dụng "." (Một dấu chấm duy nhất) làm đối số của "tình trạng hg", ví dụ:
% hg root # root of the workspace
/work/foo
% pwd # current directory is <root>/src
/work/foo/src
% hg status # no argument, see all files
M etc/foo.conf # all files are shown with paths
M src/foosetup.c # relative to workspace root
%
Sự khác biệt khi bạn rõ ràng yêu cầu cho các thư mục làm việc hiện nay là các đường dẫn tên tập tin tương đối sử dụng như là điểm khởi đầu của họ:
% hg status . # see only files under current path
M foosetup.c
%
Giải pháp tốt hơn và sạch hơn so với phiên bản "được chấp nhận". – vadipp
Thật không may, không chính xác giống nhau, hạn chế hơn, so với giải pháp được chấp nhận. Do đó không phổ biến hơn và sạch hơn. "trạng thái hg". chỉ báo cáo trạng thái cho cây con bên dưới., sử dụng đường dẫn tương đối. Trạng thái báo cáo "hg status $ (hg root)" cho toàn bộ repo, sử dụng đường dẫn liên quan đến CWD. Bởi vì rất khó để hiển thị điều này trong một bình luận, tôi đang thêm một câu trả lời mới với các ví dụ. –
Hg trở nên tốt hơn theo thời gian: Với hg 2.2.3, tôi có thể xác định st
bí danh.
[alias]
st = !hg status $($HG root) $HG_ARGS
Do đó:
hg st
sẽ cung cấp cho bạn đường dẫn tương đối đến thư mục hiệnhg status
sẽ cung cấp cho bạn đường dẫn tương đối đến thư mục gốc hg
tôi thêm câu trả lời này không phải vì nó tốt hơn câu trả lời được chấp nhận, nhưng bởi vì nó làm rõ sự khác biệt giữa "trạng thái hg." và "hg status $ (hg root)". Mà có thể đã nhầm lẫn một số người bình luận - tồi tệ hơn, có thể dẫn đến quên để kiểm tra trong công cụ cần thiết.
"trạng thái hg". chỉ báo cáo trạng thái cho cây con bên dưới., sử dụng đường dẫn tương đối.
"trạng thái hg $ (hg root)" báo cáo trạng thái cho toàn bộ repo, sử dụng đường dẫn tương đối với CWD.
Cả hai đều hữu ích.
(Nói chung, "đường dẫn trạng thái hg" hiển thị trạng thái cho đường phụ bên dưới đường dẫn (toàn bộ repo nếu đường dẫn = $ (hg root) ", nhưng liên quan đến CWD.(Tôi phải thừa nhận rằng tôi thấy điều này khó hiểu, bởi vì có hai điều xảy ra: subtree để có được trạng thái, và cwd để hiển thị đường dẫn tương đối.))
Điều này được thể hiện bằng ví dụ về phiên trình bao được nhúng bên dưới.
$ bash [~/hack] 562 $> mcd hg-test
./hg-test
$ bash [~/hack/hg-test] 563 $> hg init .
$ bash [~/hack/hg-test] 564 $> mkdir subdir
$ bash [~/hack/hg-test] 565 $> touch foo
$ bash [~/hack/hg-test] 566 $> touch subdir/bar
$ bash [~/hack/hg-test] 567 $> hg status
? foo
? subdir/bar
$ bash [~/hack/hg-test] 552 $> hg status $(hg root)
? foo
? subdir/bar
$ bash [~/hack/hg-test] 552 $> cd subdir
./subdir
$ bash [~/hack/hg-test/subdir] 553 $> hg status
? foo
? subdir/bar
$ bash [~/hack/hg-test/subdir] 553 $> hg status .
? bar
$ bash [~/hack/hg-test/subdir] 513 $> hg status $(hg root)
? ../foo
? bar
$ bash [~/hack/hg-test/subdir] 523 $> hg status
? foo
? subdir/bar
Do đó, nếu bạn muốn làm một cái gì đó giống như làm một bản sao lưu các tập tin trong cây con địa phương, mà không kiểm tra trong, và sau đó trở lại (tôi thường cần phải làm điều này khi sử dụng "khóa hg", bởi vì tôi đang sử dụng file FrameMaker mà không thể được diffed hoặc sáp nhập trong vòng hg (hoặc hầu như không gì cả)):
$ bash [~/hack/hg-test/subdir] 523 $> mkdir bak; hg status -n . | xargs cp --target-directory bak
$ bash [~/hack/hg-test/subdir] 524 $> ls bak
bar
Nhưng nếu bạn muốn sao lưu tất cả các file trong cây được báo cáo theo tình trạng
$ bash [~/hack/hg-test/subdir] 528 $> mkdir bak-root; hg status -n $(hg root) | xargs cp --target-directory bak-root
cp: will not overwrite just-created `bak-root/bar' with `bar'
$ bash [~/hack/hg-test/subdir] 529 $> ls bak-root
bar foo
bằng wa y, cảnh báo hiển thị các vấn đề về tên tệp xung đột. Tôi thường sử dụng một công cụ nhỏ, tôi phải thêm hậu tố .bak hoặc xargs. Nhưng ví dụ này là đủ.
Bằng cách này^2, tôi thường làm những việc như thế này với "hg status -nm", nhưng ví dụ trên là đủ.
Cách tiêu chuẩn mà làm việc kể từ khi phiên bản đồng bóng cũ (> = 1.1 so với năm 2008) là:
hg status re:
trong đó sản lượng:
M ../contrib/buildrpm
M ../hg
M httprepo.py
Từ lanh lợi 1,3 (2009) bạn có thể xác định một số alias
nếu bạn muốn:
[alias]
sst = status re:
Hành vi này cuối cùng đã được ghi nhận ở 3.4 (2015):
$ hg help status --verbose
[...]
- show changes in the working directory relative to the current directory
(see 'hg help patterns' for more information):
hg status re:
Từ lanh lợi 4.2 (có thể 2017) bạn có thể nói lệnh tình trạng luôn luôn in đường dẫn tương đối đặt này trong hgrc
của bạn:
[commands]
status.relative = True
kiểm tra trực tiếp trên dòng lệnh (hg> = 4.2):
$ hg --config commands.status.relative=True status
M ../contrib/buildrpm
M ../hg
M httprepo.py
Cuối cùng, lanh lợi 4,3 giới thiệu ui.tweakdefaults
đó, trong số những thứ khác, thay đổi một số giá trị mặc định cho những người hiện đại hơn:
[ui]
# hg status prints relative paths
# hg diff produces patches in git format
tweakdefaults = True
Nếu bạn đang ở trên một đồng bóng hiện đại (> = 4.3), đây là chính thức đề nghị đường.
- 1. .load() và đường dẫn tương đối
- 2. Đường dẫn tuyệt đối và tương đối
- 3. Trang GitHub và đường dẫn tương đối
- 4. Đường dẫn tương đối App.config
- 5. Đường dẫn tương đối ASP.NET
- 6. Đường dẫn vật lý, tương đối, tuyệt đối và các đường dẫn khác
- 7. đường dẫn tuyệt đối tương đối perl
- 8. Mercurial (hg) tương đương với reset git (--mixed hoặc --soft)
- 9. PHP require() tương đối lỗi đường dẫn
- 10. đường dẫn tương đối Bắt trong Vim
- 11. Đường dẫn tương đối trong Winforms
- 12. ASP.Net MVC và RenderPartial w/đường dẫn tương đối
- 13. đường dẫn cherrypy và tương đối trong ứng dụng WSGI
- 14. đường dẫn tương đối vào tệp CSS
- 15. Đường dẫn tệp tương đối Java
- 16. Đường dẫn tương đối sử dụng Uri
- 17. log4j tương đối đường dẫn tập tin
- 18. Gói đường dẫn tương đối trong R
- 19. đường dẫn tương đối bằng extjs 4
- 20. PhantomJS yêu cầu() đường dẫn tương đối
- 21. đường dẫn tệp tương đối trong perl
- 22. Kết hợp base tương đốiUri với đường dẫn tương đối
- 23. Đường dẫn tuyệt đối quay lại đường dẫn tương đối trên web
- 24. Đường dẫn tương đối đến đường dẫn tuyệt đối trong Elisp
- 25. Chuyển đổi đường dẫn tuyệt đối thành đường dẫn tương đối trong tập tin thực thi
- 26. Mercurial undo three hg push
- 27. Đường dẫn tương đối đến đường dẫn tuyệt đối trong VB.NET
- 28. Đường dẫn. Hoàn toàn tuyệt đối với các đường dẫn tương đối
- 29. Nhận đường dẫn tương đối từ đường dẫn tuyệt đối trong PHP
- 30. Sử dụng hg hoàn nguyên trong Mercurial
Tôi nghĩ một tùy chọn trong .hgrc nên được thêm vào, xem http://bz.selenic.com/show_bug.cgi?id=3835 để biết yêu cầu tính năng. –