2010-03-20 24 views
8

tôi không thể nhận TortoiseHg (1.0) để làm việc với subreposTortoiseHg và subrepos

Tôi có một cấu trúc thư mục như thế này:

root 
    .hg 
    .hgsub 
    .hgsubstate 
    Customer1 
    Project1 
     .hg 
     foo.txt 
    Project2 
     .hg 
    Customer2 
    Project3 
     .hg 

file .hgsub dưới gốc trông giống như

Customer1\Project1=Customer1\Project1 
Customer1\Project2=Customer1\Project2 
Customer2\Project3=Customer2\Project3 

Nếu sửa đổi tệp Customer1\Project1\foo.txt và cam kết từ gốc nó hoạt động

>hg ci -m "command line commit" 
committing subrepository customer1\project1 

trong TortoiseHg customer1\project1 được hiển thị với tình trạng S (subrepo) nhưng khi commiting tôi nhận được một thông điệp

abort: customer1/project1: no match under directory! 

là kịch bản này không được hỗ trợ hoặc tôi đang làm điều gì sai?

Các doc nói:.
"TortoiseHg 1.0 giới thiệu hỗ trợ thô sơ cho subrepositories, và chỉ trong công cụ cam/status Khi Mercurial coi một subrepo như bẩn, nó sẽ xuất hiện trong công cụ cam kết như một mục đặc biệt trong danh sách tập tin với một trạng thái S. Nếu một subrepo được bao gồm trong danh sách tập tin của một cam kết, subrepo được cam kết cùng với những thay đổi khác, cập nhật các tập tin .hgsubstate trong kho gốc chính. "

+0

Tôi gặp vấn đề tương tự. Dường như có thể nó có liên quan đến "tortoisehg cố gắng cam kết customer1/project1 thay vì customer1 \ project1 (dấu gạch chéo ngược)" Cam kết từ dòng lệnh không gây ra vấn đề gì. – drye

Trả lời

9

Tôi đã có khá nhiều vấn đề tương tự và bắt đầu thử một loạt các biến thể và cuối cùng tôi đã làm việc cho tôi bằng cách sử dụng dấu gạch chéo (/) trên cả hai mặt của dấu bằng và không phải dấu gạch chéo ngược (\) ở bất cứ đâu.

Vì vậy, cố gắng ...

Customer1/Project1=Customer1/Project1 
Customer1/Project2=Customer1/Project2 
Customer2/Project3=Customer2/Project3 

Ngoài ra, khi nó không hoạt động, tập tin .hgsubstate của tôi chỉ có một loạt các số không trong đó. Khi nó bắt đầu hoạt động, nó đã có một GUID chính hãng trong đó.

+0

Cảm ơn, tôi đã di chuyển ra khỏi subrepos vì vậy tôi không cần nó bản thân mình nhưng tôi tin tưởng nghiên cứu của bạn và đánh dấu này là câu trả lời. – adrianm

+7

bạn đã chuyển đến điều gì? –

2

Tôi nghĩ vấn đề của bạn là với quy định cụ thể "Customer1 \ Project1" như một kho lưu trữ phụ vì Customer1 phải là một kho lưu trữ lồng nhau là tốt.

Customer1Customer2 cả nên có files '.hgsub' mô tả subrepos bên trong chúng (Project1/2)

Remake kho Customer1 của bạn ở nơi khác và sao chép Project1project2 vào đó. Thêm Project1Project2 mục vào tệp '.hgsub' trong Customer1.

Sau đó, thực hiện tương tự cho một kho lưu trữ Customer2.

Hãy nhớ rằng kho lồng nhau có thể mình được lồng vào nhau để tạo ra một 'root' kho và sau đó sao chép Customer1Customer2 vào nó nhớ để thêm các mục vào file .hgsub.

Cam kết 'gốc' và bạn sẽ ổn.

Điều quan trọng là để đẩy thay đổi từ tất cả các trường hợp của một subrepos đến chủ nhân bản sao của nó sao cho các bản sao khác bao gồm subrepos đó có thể kéo bản sửa đổi đó nếu cần.

Tôi có tất cả các bản chính trong cùng một thư mục mẹ trên máy của tôi để nó tạo các đường dẫn tương đối bên trong các tệp '.hgsub' như '../Project1' hoặc '../Customer1' một cách đơn giản để đẩy các thay đổi đến bản sao cục bộ của tôi từ máy chủ trung tâm của chúng tôi.

Khi sử dụng TortoiseHG, bạn sẽ ổn với v1.0 vì nó sẽ tạo và quản lý tệp '.hgsubstate' trong kho lưu trữ lồng nhau miễn là bạn đã tạo tệp '.hgsub'!

+1

Sẽ dễ dàng hơn nhiều khi chỉ sử dụng dòng lệnh cho cam kết cấp cao nhất. Tôi đoán là tortoisehg cố gắng cam kết customer1/project1 thay vì customer1 \ project1 (dấu gạch chéo ngược). – adrianm

7

Tôi đã có thể vượt qua vấn đề này bằng cách cam kết sử dụng dòng lệnh cho repo chính.

hg commit -m 'Updated subrepo' 
4

tôi đã cùng một vấn đề:

Trong một trong những kho tôi cam kết của một trong những module subrepo thay đổi của tôi thất bại với thông điệp

"abort: mysubrepo: no match under directory!" 

Lý do:

TortoiseHG không cam kết với subrepository vì nó xử lý các tên thư mục phân biệt chữ hoa chữ thường!

Ví dụ: kho ban đầu:

C:\Shared\MySubRepo 

Nhân bản này như một subrepo vào kho lưu trữ khác bằng dòng lệnh

hg clone C:\shared\mysubrepo <--- Note the lower cases! 

sẽ tạo một thư mục subrepo mysubrepo bên trong kho cha mẹ của bạn. Thêm mã vào tệp .hgsub như thường lệ (tôi luôn sử dụng nền tảng độc lập '/' thay vì '\', vì vậy tôi không nghĩ đó là lý do cho lỗi). Cố gắng cam kết với --subrepos TortoiseHG sẽ kết thúc bằng "không khớp với thư mục!" lỗi. Tuy nhiên, cam kết bằng dòng lệnh hoạt động.

Sau đổi tên thư mục subrepomysubrepo-MySubRepo (như thư mục gốc với trường hợp trên) TortoiseHg có thể cam kết thành công!

Có thể bạn phải chỉnh sửa tên thư mục trong tệp hgrc, nhưng tôi không chắc liệu điều này có thực sự cần thiết hay không, bởi vì tôi đã đổi tên nó trong tệp trước khi tìm ra. trong tên thư mục chính nó.Cũng loại bỏ kho lưu trữ từ kho lưu trữ của TortoiseHg Workbench và readding nó có thể cần thiết (và/hoặc khởi động lại Workbench).

0

Thêm 2 xu của tôi.

Tôi đã nhận lỗi này abort: customer1/project1: no match under directory trên Windows trong các tình huống sau:

  • repo là trong một thư mục có tên MyFolder (chú ý chữ viết hoa)
  • repo đã có một subrepo
  • một số tác phẩm (chỉ có một số!) trong repo mẹ đã được cam kết sử dụng myfolder/filename.ext (chú ý chữ thường)

Mọi thứ hoạt động tốt, cam kết dòng lệnh hoạt động tốt, nhưng Tortoise phàn nàn.

Đổi tên tệp (tìm các tệp chữ thường bằng cách sử dụng hg status --all và bạn tốt)

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