2012-01-19 53 views
9

Vì vậy, đã có một nhánh mới được tạo ra khi chúng tôi thực hiện một số thay đổi đột phá đối với cơ sở mã.Tạo chi nhánh mới, thực hiện nhiều thay đổi, cách xem danh sách các tệp đã thay đổi?

Bây giờ chúng ta sẽ hợp nhất, nhưng trước đó tôi muốn có danh sách tất cả các tệp đã được thay đổi trong nhánh.

Làm cách nào để có danh sách tệp? Tôi cố gắng:

hg status --change REV 

Nhưng tôi không chắc chắn nếu đó là những gì tôi muốn, vì tôi muốn tất cả các file đã thay đổi trong ngành này và không phải là một phiên bản cụ thể tại các chi nhánh.

BTW, làm cách nào tôi có thể xem số sửa đổi?

+1

Tuyệt vời, ai đó đã tìm thấy 'tình trạng hg - -thay đổi'! :-) Mọi người hầu như luôn luôn sử dụng 'hg diff' hoặc' hg log -v' khi họ đang tìm kiếm các tệp đã thay đổi giữa hai lần sửa đổi. Tôi ra khỏi phiếu bầu ngay bây giờ, nhưng tôi sẽ upvote vào ngày mai! –

Trả lời

8

Hãy thử với

$ hg status --rev "branch('your-branch')" 

để có được những thay đổi giữa đầu tiên và cuối cùng changeset trên cành (hg status ngầm sẽ sử dụng min(branch('your-branch'))max(branch('your-branch')) khi bạn cung cấp cho nó một loạt các phiên bản như thế này).

Vì bạn sẽ được sáp nhập, bạn thực sự nên xem xét

$ hg status --rev default:your-branch 

để xem những gì đang thay đổi giữa các default chi nhánh và your-branch. Điều này cho bạn thấy các sửa đổi được thực hiện và lọc ra mọi sửa đổi được thực hiện trên nhánh do hợp nhất với default.

này là cần thiết trong trường hợp lịch sử của bạn trông như thế này:

your-branch:  x --- o --- o --- o --- o --- o --- y 
       /  /  /
default: o --- a --- o --- b --- o --- c --- o --- o --- d 

nơi bạn đã sáp nhập default thành chi nhánh của bạn một vài lần. Hợp nhất default vào chi nhánh của bạn là bình thường vì bạn muốn thường xuyên tích hợp các nội dung mới nhất từ ​​nhánh đó để tránh các nhánh trôi quá xa nhau.

Nhưng nếu tệp mới được giới thiệu trên default và sau đó được hợp nhất thành B, thì bạn thực sự không muốn thấy điều đó trong đầu ra hg status. Bạn sẽ thấy nó nếu bạn làm

$ hg status --rev a:y 

kể từ khi tập tin đã không có mặt trong a, nhưng hiện diện trong y. Nếu bạn làm

$ hg status --rev d:y 

thì bạn sẽ không thấy tệp ở đầu ra, giả sử rằng nó có ở cả hai đầu.


Bạn viết trong nhận xét rằng bạn đang làm việc Kiln kho lưu trữ. Họ có nghĩa là "nhân bản" khi họ nói "chi nhánh", nhưng ở trên vẫn có thể được điều chỉnh cho trường hợp của bạn. Tất cả các thay đổi sẽ có trên defaultnamed branch, nhưng điều đó vẫn ổn.

Chạy lệnh sau đây trong bản sao cục bộ của kho "chi nhánh":

$ hg bookmark -r tip mybranch 

này đánh dấu đỉnh hiện nay là người đứng đầu của mybranch. Sau đó kéo tất cả các changesets từ kho chính:

$ hg pull https://you.kilnhg.com/Repo/public/Group/Main 

Sau đó bạn đánh dấu mới đầu như là đỉnh của kho chính:

$ hg bookmark -r tip main 

Bây giờ bạn có thể chạy

$ hg status --rev main:mybranch 

để xem các thay đổi giữa mainmy-branch. Nếu bạn muốn xem những gì bạn đã làm trên nhánh chính nó, việc sử dụng

$ hg status --rev "::mybranch - ::main" 

Phần ::mybranch sẽ chọn changesets đó là tổ tiên của mybranch - đây là tất cả các tác phẩm mới của mình, cộng với lịch sử cũ từ trước khi bạn phân nhánh. Chúng tôi xóa lịch sử cũ với - ::main. Trong các phiên bản cũ của Mercurial, bạn sẽ sử dụng hg log -r -r mybranch:0 -P main.

+0

Tên chi nhánh của tôi giống như: 'this-is-a-branch' để tôi đặt nó trong dấu ngoặc kép? – codecompleting

+0

Có, dấu ngoặc kép là bắt buộc khi bạn có '-' trong tên chi nhánh. –

+0

Tôi làm cách nào để biết số phiên bản mà tôi phân nhánh? hg log không có phân trang, vì vậy nó bay ra khỏi bộ đệm màn hình của tôi! – codecompleting

0

Trong trường hợp như thế này, tôi muốn thực hiện hợp nhất thử nghiệm từ bản sao mới được kiểm tra của repo. Điều này có lợi thế là tôi có thể thấy có bao nhiêu xung đột hợp nhất sẽ tạo ra, và tôi có thể giữ kết quả hợp nhất vì tôi đã làm nó trong bản sao của chính nó.

0

Để xem số sửa đổi, cho phép graphlog extension và chạy:

$ hg log -b your-branch -G 

này mang đến cho bạn một đồ thị ASCII đẹp. Điều này có thể có ích để nhanh chóng xem xét đồ thị, nhưng tôi khuyên bạn sử dụng TortoiseHg cho một người xem cross-platform log:

TortoiseHg 2.0 workbench

0

tôi phải kết hợp các chi nhánh mặc định vào chi nhánh của tôi để có được một số sửa lỗi, bây giờ là lệnh trên cũng cho thấy các tệp đã thay đổi do hợp nhất (tệp này đã thay đổi sau khi hợp nhất lại trong nhánh mặc định).

Vì vậy, để có được chỉ các tập tin chính xác tôi sử dụng một cái gì đó như thế này:

hg log --rev "branch('my-branch') and not merge()" --template '{files}\n' | sed -e 's/ /\n/g' | sort -u 

nếu bạn có khoảng trống trong tên tập tin, bạn có thể làm theo cách này:

hg log --rev "branch('my-branch') and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u 

Và để trả lời câu hỏi cuối cùng của bạn, bản sửa đổi có thể được hiển thị theo cách này:

hg log --rev "branch('my-branch') and not merge()" --template '{rev}\n' 

CHỈ DẪN: Tôi sử dụng bí danh hg cho điều này:

[alias] 
_lf = ! $HG log --rev "branch(\"$1\") and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u 
0

Với lanh lợi, nếu bạn muốn có được danh sách của tất cả các tập tin thay đổi trong chi nhánh hiện tại của bạn (thay đổi thực hiện của changeset bạn), bạn có thể sử dụng các lệnh này::

hg log --branch $(hg branch) --stat | grep '|' | awk -F\ '{printf ("%s\n", $1)}' | sort -u 
kết quả

Ví dụ:

api/tests/test_my_app.py 
docker/run.sh 
api/my_app.py 

Giải thích về các lệnh:

hg log --branch $(hg branch) --stat 

Hiện lịch sử sửa đổi của toàn bộ kho hoặc các tập tin và đầu ra tóm tắt diffstat kiểu thay đổi

hg branch 

Hiện tên chi nhánh hiện tại

grep '|' 

Tìm kiếm một mẫu văn bản, trong trường hợp này , nó là "|"

awk -F\ '{printf ("%s\n", $1)}' 

Space tách biểu thị từng lĩnh vực trong một bản ghi và in mỗi người trong một dòng mới

sort -u 

Sắp xếp tất cả các dòng in và xóa các bản sao

+0

Vui lòng thêm giải thích cho mỗi lệnh trong số các lệnh này. – Wndrr

+0

Xong! Tôi hi vọng cái này giúp được. –

Các vấn đề liên quan