SVN: Có cách nào để đánh dấu một tập tin là không phạm lỗi không?


153

Với TortoiseSVN, tôi có thể di chuyển một tệp vào danh sách thay đổi bỏ qua cam kết, để khi tôi cam kết toàn bộ cây, các thay đổi đối với tệp đó sẽ không được cam kết.

Có cách nào để làm một cái gì đó tương tự bằng cách sử dụng công cụ dòng lệnh svn không?

EDIT: Cảm ơn những gợi ý để sử dụng svn:ignore, nhưng điều đó không làm được những gì tôi đang tìm kiếm.

svn:ignoreảnh hưởng đến những thứ như svn add& svn import. Nó cung cấp cho nó một danh sách các mẫu tên tệp để bỏ qua.

Tôi có một tệp đã được kiểm soát nguồn, nhưng tôi muốn thực hiện các thay đổi tạm thời cho tệp đó mà tôi không muốn cam kết sau này khi tôi cam kết toàn bộ cây nguồn. Tôi đang thực hiện rất nhiều thay đổi khác và tôi có thể dán một ghi chú trên màn hình của mình để bảo tôi hoàn nguyên tệp đó trước khi tôi cam kết cây, nhưng thật tuyệt nếu svn có thể tự động bỏ qua tệp đó.


1
Có một cách sử dụng chi nhánh cá nhân và trạng thái chuyển đổi. [Xem bài đăng khác của tôi về chủ đề này.] [1] [1]: stackoverflow.com/questions/862950/
triệt

Câu trả lời:


120

Subversion không có tính năng "không cam kết" / "bỏ qua cam kết" tích hợp, kể từ tháng 2 năm 2016 / phiên bản 1.9. Câu trả lời này là một cách giải quyết dòng lệnh không lý tưởng

Như OP tuyên bố, TortoiseSVN đã tích hợp sẵn tính năng thay đổi, "bỏ qua cam kết", tự động được loại trừ khỏi các cam kết. Máy khách dòng lệnh không có điều này, vì vậy bạn cần sử dụng nhiều thay đổi để thực hiện cùng một hành vi này (có cảnh báo) :

  • một cho công việc bạn muốn cam kết [công việc]
  • một cho những thứ bạn muốn bỏ qua [bỏ qua cam kết]

Vì đã có tiền lệ với TortoiseSVN, tôi sử dụng "bỏ qua cam kết" trong các ví dụ của mình cho các tệp mà tôi không muốn cam kết. Tôi sẽ sử dụng "công việc" cho các tệp tôi làm, nhưng bạn có thể chọn bất kỳ tên nào bạn muốn.

Đầu tiên, thêm tất cả các tệp vào một thay đổi có tên là "công việc". Điều này phải được chạy từ gốc của bản sao làm việc của bạn:

svn cl work . -R

Điều này sẽ thêm tất cả các tệp trong bản sao làm việc theo cách đệ quy vào danh sách thay đổi có tên là "công việc". Có một bất lợi cho điều này - vì các tệp mới được thêm vào bản sao đang hoạt động, bạn sẽ cần thêm cụ thể các tệp mới hoặc chúng sẽ không được bao gồm. Thứ hai, nếu bạn phải chạy lại cái này thì bạn sẽ cần phải thêm lại tất cả các tệp "bỏ qua cam kết" của mình. Không lý tưởng - bạn có thể bắt đầu duy trì danh sách 'bỏ qua' của riêng mình trong một tệp như những người khác đã làm.

Sau đó, đối với các tệp bạn muốn loại trừ:

svn cl ignore-on-commit path\to\file-to-ignore

Bởi vì các tệp chỉ có thể nằm trong một thay đổi, nên việc bổ sung này sau khi thêm "công việc" trước đó của bạn sẽ xóa tệp bạn muốn bỏ qua khỏi công cụ thay đổi "công việc" và đưa nó vào danh sách thay đổi "bỏ qua cam kết".

Khi bạn đã sẵn sàng cam kết các tệp đã sửa đổi mà bạn muốn cam kết, sau đó bạn chỉ cần thêm "--cl work" vào cam kết của mình:

svn commit --cl work -m "message"

Đây là một ví dụ đơn giản trông giống như trên máy của tôi:

D:\workspace\trunk>svn cl work . -R
Skipped '.'
Skipped 'src'
Skipped 'src\conf'
A [work] src\conf\db.properties
Skipped 'src\java'
Skipped 'src\java\com'
Skipped 'src\java\com\corp'
Skipped 'src\java\com\corp\sample'
A [work] src\java\com\corp\sample\Main.java
Skipped 'src\java\com\corp\sample\controller'
A [work] src\java\com\corp\sample\controller\Controller.java
Skipped 'src\java\com\corp\sample\model'
A [work] src\java\com\corp\sample\model\Model.java
Skipped 'src\java\com\corp\sample\view'
A [work] src\java\com\corp\sample\view\View.java
Skipped 'src\resource'
A [work] src\resource\icon.ico
Skipped 'src\test'

D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties
D [work] src\conf\db.properties
A [ignore-on-commit] src\conf\db.properties

D:\workspace\trunk>svn status

--- Changelist 'work':
        src\java\com\corp\sample\Main.java
        src\java\com\corp\sample\controller\Controller.java
        src\java\com\corp\sample\model\Model.java
M       src\java\com\corp\sample\view\View.java
        src\resource\icon.ico

--- Changelist 'ignore-on-commit':
M       src\conf\db.properties

D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue"
Sending        src\java\com\corp\sample\view\View.java
Transmitting file data .done
Committing transaction...
Committed revision 9.

Một cách khác là chỉ cần thêm mọi tệp bạn muốn cam kết vào danh sách thay đổi 'công việc' và thậm chí không duy trì danh sách bỏ qua, nhưng đây cũng là một công việc rất nhiều. Thực sự, giải pháp lý tưởng, đơn giản duy nhất là nếu / khi điều này được thực hiện trong chính SVN. Có một vấn đề lâu dài về vấn đề này trong trình theo dõi vấn đề Subversion, SVN-2858 , trong trường hợp điều này thay đổi trong tương lai.


1
Tôi đã thêm hai tệp với lệnh bạn đã đề cập: $svn st --- Changelist 'ignore-on-commit': M database.php M config.php và vẫn còn, chúng đã được gửi đến repo trên cam kết. Bất cứ ý tưởng những gì tôi đã làm sai?
Attila Fulop

7
Việc thêm các tệp vào thay đổi 'bỏ qua cam kết' không tự nó ngăn chặn các tệp được cam kết. TortoiseSVN (một máy khách GUI Windows) đã được xây dựng liên quan đến "bỏ qua cam kết", nhưng dòng lệnh svn thì không. Gợi ý duy nhất tôi có trong câu trả lời ban đầu của mình là thêm các tệp bạn muốn cam kết với một người thay đổi, và nói với nó để cam kết điều đó
Joshua McKinnon

7
bỏ qua cam kết chắc chắn là một danh sách dành riêng cho Rùa. Tất cả những gì nó đang làm là ngăn các mục được kiểm tra trong GUI theo mặc định, do đó, đây là một tính năng cụ thể của GUI GUI. Bạn không cần sử dụng dòng lệnh để thêm vào danh sách nếu bạn sử dụng GUI. Chỉ cần menu ngữ cảnh trên các mục danh sách cam kết và ở phía dưới, bạn có thể di chuyển chúng đến một thay đổi và bỏ qua cam kết đã được xác định. tortoisesvn.net/docs/release/TortoirSVN_en/ từ
tjmoore

Điều này đã không làm jack. nó cam kết mọi thứ.
ahnbizcad

Không hoạt động, câu hỏi được hỏi cụ thể về một giải pháp dòng lệnh, không phải GUI.
RIV

26

Tôi đã luôn tìm thấy bản thân mình trong tình huống này quá: và danh sách thay đổi không làm việc cho tôi - tôi muốn thực hiện một danh sách ngắn các tập tin mà tôi không muốn cam kết, chứ không phải duy trì một danh sách lớn các tập tin mà tôi làm muốn cam kết!

Tôi làm việc trên dòng lệnh linux: vì vậy giải pháp của tôi là tạo một tập lệnh / usr / bin / svnn (vâng, với hai 'n's!) Như sau:

#! /bin/bash
DIR=/home/mike/dev/trunk

IGNORE_FILES="\
        foo/pom.xml \
        foo/src/gwt/App.gwt.xml \
        foo/src/main/java/gwt/Common.gwt.xml \
        foo/src/main/resources/context/datasource/local.xml \
        foo/src/main/resources/context/environment/local.xml"

for i in $IGNORE_FILES; do mv $DIR/$i $DIR/"$i"_; done;

svn "$@"

for i in $IGNORE_FILES; do mv $DIR/"$i"_ $DIR/$i; done;

Rõ ràng, điều này phù hợp với hoàn cảnh của tôi - nhưng chỉ cần thay đổi TRỰC TIẾP và IGNORE_FILES cho phù hợp với thiết lập dev của bạn. Remeber để thay đổi tập lệnh để thực thi với:

sudo chmod +x /usr/bin/svnn

.. sau đó bạn chỉ cần sử dụng "svnn" thay vì "svn" để chạy lật đổ mà không sợ kiểm tra các thay đổi cục bộ đối với các tệp trong danh sách IGNORE_FILES. Tôi hi vọng cái này giúp được!


Cuối cùng, câu trả lời này thực sự đúng. Bạn cần phải viết một số công cụ. Điều này thực sự không hoàn hảo, vì tôi muốn có một tùy chọn động, như svnn ignore configs/*- với các ký tự đại diện, và chuông và còi. Tôi nghĩ rằng tôi tự viết một cái gì đó như thế, và sau đó quay lại đây!
Tomasz Gandor

điều đó thật tuyệt! Thậm chí tốt hơn, tạo một bí danh trong .bashrc cho svn -> svnn. Thậm chí tốt hơn, thay vì chỉ định các tệp để bỏ qua bên trong lệnh, nó có thể hoạt động như git, nó sẽ kiểm tra tệp .ignore bên trong thư mục và bỏ qua mọi tệp phù hợp với mẫu.
Tarek

Thay vì phải học lại cách gõ svnn, hãy xem xét việc gọi nó svnvà đặt tập lệnh này vào một cái gì đó có thể là lúc bắt đầu PATH của bạn, chẳng hạn như ${HOME}/bin. Từ chính kịch bản, sau đó bạn sẽ gọi /usr/bin/svn.
Joost

17

Tôi không tin có một cách để bỏ qua một tập tin trong kho lưu trữ. Chúng tôi thường chạy vào đây với web.config và các tệp cấu hình khác.

Mặc dù không hoàn hảo, nhưng giải pháp tôi thường thấy và sử dụng là có tệp .default và một tác vụ cần thiết để tạo các bản sao cục bộ.

Ví dụ, trong repo là một tệp được gọi là web.config.defaultcó các giá trị mặc định. Sau đó tạo một tác vụ cần thiết sẽ đổi tên tất cả các web.config.defaulttệp thành web.configđó có thể được tùy chỉnh thành các giá trị cục bộ. Nhiệm vụ này phải được gọi khi một bản sao làm việc mới được lấy hoặc bản dựng được chạy.

Bạn cũng cần bỏ qua web.configtệp được tạo để nó không được cam kết với kho lưu trữ.


8

Kiểm tra các thay đổi , có thể cung cấp cho bạn một tùy chọn để lọc ra các tệp bạn đã thay đổi nhưng không muốn cam kết. SVN sẽ không tự động bỏ qua một tệp trừ khi bạn nói với nó - và cách bạn nói với nó rằng tệp này bằng cách nào đó khác với các tệp khác là đưa nó vào một thay đổi.

Nó đòi hỏi nhiều công việc hơn cho bạn và bạn chỉ có thể áp dụng công cụ thay đổi cho bản sao làm việc của mình (rõ ràng, hãy tưởng tượng sự hỗn loạn có thể xảy ra nếu bạn có thể áp dụng thuộc tính 'không bao giờ cập nhật' cho bản sửa đổi!).


1
Nhưng đó là chính xác những gì chúng ta muốn. Ví dụ: một tệp nguồn mà bạn cần đặt defaultUserId = yourId, thay vì mặc định của hệ thống.
orbfish

4

Tôi đến chủ đề này để tìm cách tạo ra một cam kết "nguyên tử" chỉ một số tệp và thay vì bỏ qua một số tệp trên cam kết, tôi đã đi theo một cách khác và chỉ cam kết các tệp tôi muốn:

svn ci filename1 filename2

Có lẽ, nó sẽ giúp được ai đó.


Câu trả lời của bạn chỉ là một gợi ý đầy đủ trong chủ đề này. svn cichỉ đơn giản là bí danh để svn commit. Lệnh Commit cho phép thực hiện cam kết cụ thể của các tệp được chỉ định
oxfn

3

Tôi chỉ tìm một giải pháp. Cho rằng TortoiseSVN hoạt động theo cách chúng tôi muốn, tôi đã cố gắng cài đặt nó trong Linux - có nghĩa là, chạy trên Wine. Đáng ngạc nhiên là nó hoạt động! Tât cả nhưng điêu bạn phải lam la:

  1. Thêm tệp bạn muốn bỏ qua cam kết bằng cách chạy: "svn changelist 'ign-on-commit'".
  2. Sử dụng TortoiseSVN để cam kết: "~ / .wine / drive_c / Chương trình \ Files / TortoiseSVN / bin / TortoiseProc.exe / lệnh: commit / path: '
  3. Các tệp bị loại trừ sẽ được bỏ chọn để xác nhận theo mặc định, trong khi các tệp sửa đổi khác sẽ được kiểm tra. Điều này giống hệt như trong Windows. Thưởng thức!

(Lý do tại sao cần loại trừ các tệp bằng CLI là vì mục menu để làm điều đó không được tìm thấy, không biết tại sao. Dù sao đi nữa, cách này hoạt động rất tốt!)


2

Các tập tin xung đột không được phép cam kết. Bạn có thể tận dụng điều này để tránh những thay đổi riêng tư của bạn ra khỏi kho lưu trữ. Điều này hoạt động tốt nhất với một số lượng nhỏ các tập tin.

Để có xung đột a-file, bản sao làm việc (WC) của bạn không được cập nhật a-filetừ kho lưu trữ và a-filetrong WC của bạn có các thay đổi ở cùng vị trí với các thay đổi trong kho lưu trữ (những thay đổi mà bạn không cập nhật đến chưa). Nếu bạn không muốn đợi các điều kiện ở trên, bạn có thể tạo xung đột a-filenhư thế này:
Trong bản sao làm việc 1 (WC1), hãy thêm một dòng văn bản vào đầu a-file, chẳng hạn như "tạo xung đột tại đây" . Sử dụng cú pháp cần thiết để bạn không phá vỡ kho lưu trữ. Cam kết a-filetừ WC1. Trong WC2, thêm một dòng văn bản khác vào đầu a-file, như "tôi muốn có xung đột" . Cập nhật từ WC2, và bây giờ a-file sẽ bị xung đột.


1

Thay vào đó, tôi sẽ viết một tập lệnh bash helper chạy svn committrên tất cả các tệp bạn cần và không có tập tin nào bạn không có. Bằng cách này bạn có nhiều quyền kiểm soát hơn.

Ví dụ: với một dòng, bạn có thể cam kết tất cả các tệp có phần mở rộng .h.cppbạn đã thực hiện các thay đổi (và sẽ không gây ra xung đột):

svn commit -m "" `svn status | grep "^M.*[h|cpp]$" | awk '{print $2}' | tr "\\n" " "`

Thay đổi / thêm phần mở rộng cho [h|cpp]một phần. Thêm một thông điệp tường trình ở giữa các trích dẫn -m ""nếu cần.


1

Một số ý tưởng đề xuất có thể được thực hiện như thế này:

Trên Windows trong PowerShell

thêm tất cả vào danh sách mặc định.ps1

dir -Recurse | ? { -not $_.PSIsContainer } | % { svn cl default $_.FullName }

thêm vào bỏ qua list.ps1

 dir file1 ... filN  % { $_.FullName } > ignore-on-commit
 cat .\ignore-on-commit | % { svn cl ignore-on-commit $_ }
 svn add ignore-on-commit

Bây giờ, bạn có thể bí danh svn ci --changelist defaultđể bạn không phải chỉ định nó mỗi lần. Lợi ích bổ sung là bạn có thể lưu trữ danh sách bỏ qua cam kết (nếu bạn muốn) trong kho lưu trữ.

Tôi làm điều này cho một số tập tin được tái tạo liên tục nhưng hiếm khi thực sự thay đổi bằng tay. Chẳng hạn, tôi thêm số sửa đổi vào các tệp cấu hình của mình trên các trình giữ chỗ cụ thể để các tệp được thay đổi trên mỗi cam kết, nhưng thay đổi thủ công là rất hiếm.


1

Tôi cảm thấy mệt mỏi vì phải chờ đợi điều này được tích hợp vào SVN. Tôi đã sử dụng tort tortSVN với chế độ bỏ qua, nhưng nó hiện ra một hộp thoại người dùng mà bạn không thể ngăn chặn dòng lệnh, và khi tôi chạy tập lệnh xây dựng của mình và pha một tách trà, tôi ghét nó khi Tôi quay lại và phát hiện ra rằng nó đang chờ người dùng nhập 10% trong suốt quá trình.

Vì vậy, đây là tập lệnh powershell của windows chỉ cam kết các tệp không có trong danh sách thay đổi:

# get list of changed files into targets
[XML]$svnStatus = svn st -q --xml C:\SourceCode\Monad
# select the nodes that aren't in a changelist
$fileList = $svnStatus.SelectNodes('/status/target/entry[wc-status/@item != "unversioned"]') | Foreach-Object {$_.path};
# create a temp file of targets
$fileListPath =  [IO.Path]::GetTempFileName();
$fileList | out-file $fileListPath -Encoding ASCII
# do the commit
svn commit --targets $fileListPath -m "Publish $version" --keep-changelists 
# remove the temp file
Remove-Item $filelistPath

1

Cập nhật tập lệnh của user88044.

Ý tưởng là đẩy các tập tin trong danh sách thay đổi không cam kết và chạy tập lệnh độc ác.

Kịch bản trích xuất các tệp không cam kết từ lệnh: trạng thái svn --changelist 'do-not-commit'

#! / bin / bash TRỰC TIẾP = "$ (pwd)"

IGNORE_FILES = "$ (trạng thái svn - trao đổi 'không-cam kết' | đuôi -n +3 | grep -oE '[^] + $')"

cho tôi bằng $ IGNORE_FILES; làm mv $ DIR / $ i $ DIR / "$ i" _; làm xong;

svn "$ @";

cho tôi bằng $ IGNORE_FILES; làm mv $ DIR / "$ i" _ $ DIR / $ i; làm xong;

Tập lệnh được đặt trong / usr / bin / svnn (sudo chmod + x / usr / bin / svnn)

trạng thái svnn, cam kết svnn, v.v ...


1

Bạn có thể định cấu hình thay đổi "bỏ qua cam kết" trực tiếp với TortoiseSVN. Không cần phải định cấu hình bất kỳ thay đổi nào khác, bao gồm tất cả các tệp khác

1) Nhấp vào "Cam kết SVN ..." (chúng tôi sẽ không cam kết, chỉ là một cách để tìm menu đồ họa cho người thay đổi) 2) Trên danh sách Nhấp chuột phải vào tệp bạn muốn loại trừ. 3) Menu: di chuyển đến thay đổi> bỏ qua cam kết

Lần tới khi bạn thực hiện Cam kết SVN ... Các tệp sẽ xuất hiện không được chọn ở cuối danh sách, trong danh mục bỏ qua cam kết.

Đã thử nghiệm với: TortoiseSVN 1.8.7, Build 25485 - 64 Bit, 2014/05/05 20:52:12, Subversion 1.8.9, -release


1
các bạn, tôi vừa thấy các bình luận của tjmoore, đã cung cấp thông tin tốt cho người dùng tort tortSVN ... không có dòng lệnh tortoisesvn.net/docs/release/TortoiseSVN_en/...
luney

Điều này có bị hỏng trong 1.9 không?
Jake H'm

1

Đây là trò chơi muộn, nhưng tôi đã tìm thấy lệnh dòng lệnh tuyệt vời nhất cho vấn đề này. Xong sử dụng bash. Thưởng thức.

svn status | grep -v excluding | sed 's/^A */"/g; s/$/"/g' | tr '\n' ' ' | xargs svn commit -m "My Message"

Ok, đây là một lời giải thích về lệnh. Một số điều sẽ cần phải được thay đổi dựa trên trường hợp sử dụng của bạn.

svn status

Tôi nhận được một danh sách tất cả các tập tin. Tất cả chúng sẽ bắt đầu với các ký tự trạng thái đó (?,!, A, v.v.). Mỗi dòng nằm trên một dòng riêng.

grep -v excluding

Tôi sử dụng grep để lọc danh sách. Nó có thể được sử dụng bình thường (bao gồm) hoặc với cờ -v (để loại trừ). Trong trường hợp này, nó được sử dụng để loại trừ, với cụm từ "loại trừ" là những gì sẽ được loại trừ.

sed 's/^. */"/g; s/$/"/g'

Bây giờ tôi loại bỏ ký tự trạng thái và khoảng trắng ở đầu mỗi dòng, sau đó trích dẫn từng dòng, sử dụng sed. Một số tên tệp của tôi có khoảng trắng trong đó, do đó trích dẫn.

tr '\n' ' '

Sử dụng tr, tôi thay thế tất cả các dòng mới bằng dấu cách. Bây giờ toàn bộ danh sách các tập tin của tôi để cam kết là trên một dòng.

xargs svn commit -m "My Message"

Cuối cùng, tôi sử dụng xargs để thực thi lệnh commit của mình với thông báo. Nó thực hiện cam kết và loại bỏ danh sách tệp được trích dẫn của tôi làm đối số cuối cùng.

Kết quả là mọi thứ cuối cùng hoạt động theo cách mà tôi muốn. Tôi vẫn ghét svn vì đã buộc tôi phải nhảy qua những cái vòng chết tiệt này, nhưng tôi có thể sống với điều này. Tôi đoán.


0

Khi tôi đang đối mặt với cùng một vấn đề chính xác, và việc tôi không tiếp tục cho tôi bất cứ điều gì, tôi nghĩ rằng tôi đã tìm thấy một cách giải quyết. Đây là những gì tôi đã làm, nó dường như hoạt động với tôi, nhưng vì tôi bị mắc kẹt với một phiên bản cũ của SVN (<1.5, vì nó không có tùy chọn --keep-local) và tôi không phải là chuyên gia về nó , Tôi không thể chắc chắn đó là một giải pháp phổ quát. Nếu nó làm việc cho bạn quá, xin vui lòng cho tôi biết!

Tôi đã giao dịch với bản cài đặt của Prestashop mà tôi nhận được từ SVN, vì những người khác đã bắt đầu làm việc với nó. Vì các cài đặt DB đã được thực hiện cho một máy chủ khác, tôi đã thay đổi chúng trong một số tệp trong thư mục / config. Vì thư mục này đã được phiên bản, việc đặt nó trong svn: bỏ qua sẽ không ngăn cản các sửa đổi cục bộ của tôi đối với thư mục đó. Đây là những gì tôi đã làm:

cp config ../cfg_bkp              # copy the files out of the repo
svn rm config                     # delete files both from svn and "physically"
svn propset svn:ignore "config" . # as the files no longer exists, I can add my ignore rule and then...
mv ../cfg_bkp config              # ...bring'em back
svn revert --recursive config     # make svn forget any existing status for the files (they won't be up for deletion anymore)

Bây giờ tôi có thể chạy svn add --force. tại root repo mà không cần thêm cấu hình của tôi, ngay cả khi nó không khớp với phiên bản của repo (tôi đoán tôi sẽ phải trải qua tất cả điều này một lần nữa nếu tôi sửa đổi nó một lần nữa, không kiểm tra). Tôi cũng có thể cập nhật svn mà không bị ghi đè hoặc bị lỗi.


0

Một giải pháp không bỏ qua các thay đổi trong thuộc tính thư mục

Tôi đã cố gắng sử dụng giải pháp dựa trên changelist, nhưng tôi có một vài vấn đề với nó. Đầu tiên kho lưu trữ của tôi có hàng ngàn tệp, do đó, thay đổi được cam kết là rất lớn và svn statusđầu ra của tôi trở nên quá dài và cần được phân tích cú pháp để trở nên hữu ích. Quan trọng nhất là tôi muốn cam kết các thay đổi xuất phát từ hợp nhất, có nghĩa là chúng bao gồm các thay đổi về tài sản. Khi cam kết thay đổi, các thuộc tính svn được đính kèm vào thư mục không được cam kết, vì vậy tôi phải thực hiện thêm một cam kết:

svn ci --cl work -m "this commits files from the work changelist only"
svn up
svn ci --depth empty DIR . -m "record merge properties"

Bạn có thể phải làm điều đó cho một số thư mục (ở đây tôi ghi lại các thuộc tính của DIRvà của thư mục hiện tại .), về cơ bản là các thư mục có Mtrong cột thứ hai khi ban hành svn statuslệnh.

Giải pháp

Tôi đã sử dụng các bản vá và svn patch. Trong mã giả:

svn diff $IGNORE_FILES > MYPATCH   # get the mods to ignore
svn patch --reverse-diff MYPATCH   # remove the mods
svn ci -m "message"                # check-in files and directory properties
svn patch MYPATCH                  # re-apply the mods

Giống như các áp phích khác, cuối cùng tôi sử dụng một tập lệnh để duy trì danh sách các tập tin cần bỏ qua:

#! /usr/bin/env bash

finish() {
    svn patch MYPATCH               # re-apply the mods
}
trap finish EXIT

IGNORE_FILES="\
sources/platform/ecmwf-cca-intel-mpi.xml \
runtime/classic/platform/ecmwf-cca.job.tmpl \
runtime/classic/platform/ecmwf-cca-intel.xml"

svn diff $IGNORE_FILES > MYPATCH # get the mods to ignore
svn patch --reverse-diff MYPATCH # remove the mods

svn "$@"

Tôi thường sử dụng nó với cirevert -R ..


-1

svn:ignore là câu trả lời của bạn

Thí dụ:

$ svn propset svn:ignore -F .cvsignore .
property 'svn:ignore' set on '.'

1
Lưu ý, ví dụ trên cho thấy cách sử dụng tệp cvsignore được cấu hình trước đó làm đầu vào cho thuộc tính svnignore của bạn.
Ben Hoffstein

1
không svn: bỏ qua chỉ dành cho các tập tin unversion. không hoạt động với các tệp phiên bản
Sérgio

1
Và nó cũng không phải là địa phương. Đó là một sự thay đổi tài sản sẽ được cam kết bởi chính nó.
Adam Badura

-9
svn propset "svn:ignore" "*.xml" .

các *.xmllà các mô hình của các tập tin để bỏ qua; bạn có thể sử dụng tên thư mục ở đây là tốt.


3
-1 vì bạn không thể bỏ qua một tệp là một phần của kho lưu trữ.
zellus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.