bin 또는 디버그 폴더 (및 dll)를 TFS에 체크인합니까?


11

TFS에 대한 빠른 질문-bin / debug 폴더를 TFS에 체크인합니까? (그렇다면 왜?) 해당 폴더의 내용이 동적으로 생성되므로 프로그래머가 읽기 전용 문제가 발생하지 않도록 폴더를 그대로 두는 것이 더 낫습니까?


스택 교환 제안에 관심이있을 수 있습니다 . 베타를 시작할 준비가 거의 다되었습니다. 몇 개만 더 있으면됩니다.
greatwolf

답변:


27

일반적으로 소스 제어는 소스에만 사용하는 것이 가장 좋으며 생성 된 파일은 소스가 아닙니다.

예외가 있습니다. 때때로 (Visual Studio를 사용하여) 미니 덤프를 읽기 위해 .pdb 파일을 유지하려고 할 수 있습니다. 생성 된 파일을 정확하게 다시 생성 할 수 없도록 툴체인을 복제 할 수없는 경우가 있습니다. 이 경우 모든 VCS 변경이 아닌 릴리스 된 소프트웨어에 대해이 작업을 수행하는 데 주로 관심이 있으며, 어떤 경우에도 버전이 지정된 폴더에 쉽게있을 수 있습니다. (이것은 일반적으로 바이너리 파일이며, 한 버전에서 다른 버전으로 포괄적으로 변경되지 않으며 VCS에있는 것만 큼 큰 이점이 없습니다.)


6
디버그 심볼을 유지하려면 심볼 서버를 설정하는 것이 좋습니다 . 소스 인덱싱을 사용하여 올바르게 수행하면 미니 덤프를 디버깅하면 먼저 심볼 서버에서 심볼을 가져온 다음 소스 컨트롤에서 관련 소스를 가져옵니다. 각 빌드를 체크인하고 태그를 지정하면 이 작업을 수동으로 수행하십시오.
Shog9

8

간단한 대답? 안 돼요! 나는 많은 이유를 생각할 수 없지만 당신이 원하는 이유는 없습니다.

dll을 체크인한다고 생각할 수있는 유일한 시간은 모든 개발자가 설치하기를 기대하지 않는 타사 라이브러리에서 온 것입니다. 그러나 여전히, 그것은 bin 폴더에 없습니다.

즉, 각 배포 패키지를 소스 제어에 배치해야하는 한 회사에서 근무했지만 고객에게 제공 한 다양한 빌드를 추적하고 필요한 경우 쉽게 롤백 할 수있었습니다.


1
하지 말아야 할 주된 이유 : 소스 제어에 몇 테라 바이트의 스토리지를 사용 하시겠습니까?
EKW

1
예를 들어 @EKW C #은 역사적으로 동일한 소스에서 동일한 바이너리를 생성하지 않습니다. .NET Core에서는 현재와 다를 수 있지만 릴리스 된 빌드에 대해 생성 된 바이너리를 유지하는 한 가지 이유입니다. 그래도 소스 컨트롤에 넣지 않았습니다. 해당 작업에 적합한 도구는 아닙니다.
Shiv

5

bin 폴더를 TFS에 체크인하지 않습니다. 이미 알고 있듯이 개발자가 솔루션을 빌드 할 때마다 bin 폴더를 체크 아웃합니다. 안좋다. 그러나 컴파일하고 실행하기 위해 프로젝트에 필요한 라이브러리가 있으며, 규칙은 모든 프로젝트를 소스 제어에서 열 수 있어야하며 컴파일하고 실행해야한다는 것입니다. 따라서 우리가하는 일은 프로젝트가 참조해야하는 DLL에 대한 "BinRef"폴더를 만들고 BinRef 폴더의 복사본에 대한 프로젝트 참조를 만드는 것입니다. BinRef 폴더 TFS에 체크인되었습니다.

이 접근법의 다른 장점은 BinRef가 항상 웹 프로젝트의 루트 레벨에 있다는 것입니다. 내 프로젝트가 살고 C:\Projects\Marcie\SomeProjectCategory\ProjectA있고에있는 DLL에 대한 참조를 만들면 C:\DLLsThatILike참조가 다음과 같이 보입니다.

\..\..\..\NiceThing.dll

. 프로젝트 파일을 보관할 수 있습니다. C:\ProjectA즉, NiceThing에 대한 프로젝트 참조가 시스템에서 작동하지 않습니다. 바라건대 사람들은 이런 식으로 참조를하지 않지만 그것이 일어나는 것을 보았습니다.


2

변경 요청 프로세스의 일부로 bin 디렉토리의 내용을 체크인합니다. 읽기 전용 문제를 피하기 위해 내용을 별도의 폴더에 복사하여 체크인합니다. 회사 정책에 따라 프로덕션으로 이동하는 모든 바이너리는 소스와 별도로 체크인해야합니다. 최상의 솔루션은 아니지만 작동하며 프로덕션 환경에있는 정확한 파일을 제공합니다.


2
처음에는이 답변을 통과하려고했는데 조금 더 생각했습니다. 우리 회사에는 실제로 재해 복구 계획이 없습니다 (너무 오래 갈 수 없습니다). 처음부터 시작해야하는 경우에 유용 할 수 있습니다. 바이너리를 소스 제어에서 꺼내 서버에 던져서 완료 할 수 있습니다.
user7676

@ user7676-프로덕션 버전의 코드를 다시 컴파일 할 수 있습니다. 그러나 DR 계획이없고 어떤 종류의 기저귀를 앓고 있다면 더 쉽고 빠릅니다. 추신. 당신은 박사 계획이 필요합니다 !!!
Ali

1

텍스트가 아닌 파일을 소스 제어로 확인하는 것을 망설입니다. 특히 개발자가 생성해야하는 것들. 또한 이미지 및 PDF와 같은 다른 이진 파일을 압축하여 각 태그 / 릴리스의 다른 곳에 저장하고 싶습니다.


0

아니요, 그러나 사내 프로젝트 제어 도구는 자동으로 수행되므로 문제가 발생합니다.

내 솔루션은 릴리스 및 디버그의 모든 파일을 쓰기 가능으로 표시하고 TFS가 불평 할 때 파일을 무시하라고 지시하므로 빌드 실패에 문제가 없습니다.


0

소스 컨트롤에 입력하지 마십시오. 그것들은 중복 정보이므로 바이너리는 해당 개정판의 소스 코드로 작성할 수 있습니다. 또한 소스 코드는 항상 최신 상태이며 빌드가 커밋되지 않을 수 있습니다.


0

다른 프로젝트의 .NET interops와 같은 생성 된 이진 파일을 저장합니다. 따라서 COM 개체를 만드는 프로젝트 A가 있고 .NET interop을 통해 사용하는 매우 느슨하게 관련된 프로젝트 B에서 해당 COM 개체를 사용하는 경우 프로젝트 A에서 프로젝트 B로 생성 된 interop을 확인합니다. 좋은 생각은 아니지만 AFAIK Visual Studio는 빌드 중에 자동으로 interop을 만들지 않기 때문에 어딘가로 가야합니다.


-2

제 생각에는 바이너리를 소스 컨트롤에 저장하지 않는 것이 가장 일반적인 실수 중 하나입니다. 소스와 함께 저장, 버전 관리, 기준선 / 라벨 및 도구를 작성해야합니다. 추적 할 수없는 소프트웨어 구축에 적합


5
귀하는 귀하의 의견을 진술했지만 왜 이것이 좋은 관행인지에 대한 어떠한 이유도 제시하지 않았습니다. 이 주제에 관심이있는 사람은 더 이상 백업하지 않고이 답변에서 가치를 거의 얻지 못할 것입니다.
Walter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.