프로젝트 폴더를 어떻게 구성합니까? [닫은]


15

안녕하세요

여러분의 프로젝트 폴더 구성 방법을 알고 싶습니다.

한 번은 고객별로 정리할 것을 제안하는 상사가있었습니다.

Projects
|
|----Customer 1
     |---- A Cool Solution 1
           |---- source
                 |---- version1.0
                 |---- version1.1
           |---- docs
                 |---- analysis
                 |---- meetings
                 |---- manuals
|----Customer 2
|----Customer 3

내 친구가 기술을 통해 팀을 조직하라고 말했습니다.

Projects
|
|----.NET
     |---- C#
          |---- Customer 1     
                |---- A Cool Solution 1
                      |---- source
                            |---- version1.0
                            |---- version1.1
                      |---- docs
                            |---- analysis
                            |---- meetings
                            |---- manuals
|----Ruby
|----PHP

그리고 너? 프로젝트 폴더를 정리할 수있는 영리한 방법이 있습니까?


# 2가 더 낫다
— Yousha Aleayoub

안녕, 2018 여기. 무엇을 선택 했습니까?
— Danyal Aytekin

답변:


6

이것이 우리가 사용한 것입니다.

Projects
|
|----Customer A
     |---- Project 1
     |     |---- BuildControl       (CI/nAnt/Make/MSBuild files and config, etc)
     |     |---- Documentation      (In XML format so we can 'build' them)
     |     |---- Source
     |     |     |---- Component X
     |     |     |---- Component X.tests
     |     |     |---- Component Y 
     |     |     |---- Component Y.tests
     |     |---- Testing
     |     Project 1.sln      (Has folders as per project on-disk structure)
     |---- Project 2
     |---- Shared/Common components
|----Customer B
|----Customer C
|----<Our Company>
     |---- Internal Project A
     |---- Internal Library B

우리는 수년 동안 많은 다른 고객과 함께 여러 프로젝트에이 구조를 사용해 왔으며 매우 잘 작동합니다.

초기 제안과 매우 유사하지만 버전 관리를 사용하여 버전 관리를 관리합니다. 서버 리포지토리는 다른 것이 아니라 "고객 X-프로젝트 Y"로 이름이 지정됩니다. 이를 통해 일부 프로젝트에서 외부 계약자가 작업 할 수 있지만 버전 관리 루트에서 권한을 설정할 수 있으므로 다른 프로젝트에 액세스 할 수 없습니다.

모든 사용자는 자신의 (Windows) dev 시스템에서 원하는 위치로 작업 사본을 체크 아웃하고 SUBST 명령을 사용하여 드라이브 문자를 해당 위치에 맵핑합니다. 그렇게하면 빌드 파일 등에 하드 코딩 된 상대 경로를 모든 사람의 설정에서 사용할 수 있습니다. 예를 들어, 원하는 경우 공유 라이브러리에 대한 링크를 가질 수 있습니다. 우리는 보통이 버전을 달성하기 위해 버전 제어 링크 / 별칭을 사용합니다.

이 구조의 큰 장점 중 하나는 고객의 코드를 서로 분리 할 수 ​​있다는 것입니다. (a) 통합 목적으로 소스를 정기적으로 업데이트하고 (b) 외부 계약자가 코드의 선택된 부분을 작업하도록해야하는 경우에 유용합니다.

두 번째 제안은 둘 이상의 기술을 사용하는 복잡한 프로젝트에서는 잘 작동하지 않습니다.


하드 코딩 된 절대 경로를 요구하는 경우는 상당히 합리적이지만 -1입니다. 하드 코딩 된 상대 경로는 99.9 %의 것에서 작동해야합니다.
— Wyatt Barnett

1
어, 거기에 절대 경로를 넣었습니까?
— JBR 윌킨슨

8

나는 꽤 평평합니다.

/ 프로젝트

상자에 따라 약간의 변형이 있지만 그 뒤에는 프로젝트를위한 개별 폴더가 많이 있습니다. 어쨌든 소스 컨트롤에 실제 거래가 있기 때문에 이것은 임시 로컬 홈입니다.


3

나는 다음과 같이 느슨하게 보이는 구조를 가지고 있습니다.

~/
|-- Developer/
|   |-- Projects/
|   |   |-- Archives/
|   |   |-- Current/
|   |   |-- Work/
|-- Projects -> ~/Developer/Projects/Current

Archives더 이상 작업하지 않는 오래된 프로젝트가 포함되어 있습니다. Work작업 관련 프로젝트를 포함합니다. Current모든 현재 개발입니다. 그런 다음 홈 디렉토리에서으로 심볼릭 링크 Projects합니다 ~/Developer/Projects/Current. ~/Projects또한 일부 작업 프로젝트에 대한 심볼릭 링크를 포함합니다.


Current에서 Work로, Archive로 프로젝트를 이동하는 것은 소스 버전 제어 도구를 사용하는 데 적합하지 않습니다. 이 경우 폴더 참조 / 링크 (작업 복사본 외부)를 사용하는 것이 좋습니다. '아카이브', '현재'및 '작업'내에서 작업 사본을 이동하고 있습니까?
— 필

1
@Fil : Git을 사용합니다. 각 프로젝트는 자체 포함 된 리포지토리이므로 어디로 옮길지는 중요하지 않습니다.
— mipadi

3

나는 또한 평평한 구조를 가지고 있습니다.

/ 프로젝트

Wyatt Barnett에 동의하면 실제 거래는 소스 제어에 그대로 있습니다.

어쨌든 많은 IDE가 최근 프로젝트 / 파일에 대한 바로 가기를 제공하기 때문에 어쨌든 폴더 구조에 특별한 것이 없어야한다고 덧붙이고 싶습니다. 그리고 어쨌든 누가 몇 개의 프로젝트를 수행합니까? 진실로 정의에 의해서만 최근의 것들입니다.

또한 어쨌든 최근 프로젝트 만 최상위 폴더에 추가합니다. 나는 모든 이전 및 완성 된 자료를 다음과 같이 보관합니다.

/ 프로젝트 / Old_stuff

또는 그런 것. 나는 일반적으로 다시 작업하지 않는 것을 보관합니다.


당신은 놀라게 될 것입니다. 저는 일반적으로 12 개 정도의 프로젝트가 연결되어 있고 현재의 "가는"랩톱에서 실행할 준비가되어 있으며 보통 하루 동안 6 십 개를 쉽게 열 수 있습니다.
— Wyatt Barnett

3

과거에는 Subversion 리포지토리를 사용하여 소스 문서를 저장했으며 리포지토리 조직에 대한 "프로젝트 마이너"규칙을 따랐습니다. 이는 크고 작은 조직 모두에서 매우 잘 작동하는 것으로 나타났습니다.

우리는 저장소 브랜치를 구성 할 것입니다. 다음과 같이 태그 및 트렁크 :

branches-+
         +-personal-+
         |          +-alice-+
         |          |       +-shinyNewFeature
         |          |       +-AUTOMATED-+
         |          |                   +-shinyNewFeature
         |          +-bob-+
         |                +-AUTOMATED-+
         |                            +-bespokeCustomerProject
         +-project-+
                   +-shinyNewFeature
                   +-fixStinkyBug
tags-+
     +-m20110401_releaseCandidate_0_1
     +-m20110505_release_0_1
     +-m20110602_milestone
trunk

실제 소스 트리 자체에서 다음과 같은 구조를 사용합니다.

  (src)-+
        +-developmentAutomation-+
        |                       +-testAutomation
        |                       +-deploymentAutomation
        |                       +-docGeneration
        |                       +-staticAnalysis
        |                       +-systemTest
        |                       +-performanceMeasurement
        |                       +-configurationManagement
        |                       +-utilities
        +-libraries-+
        |           +-log-+
        |           |     +-build
        |           |     +-doc
        |           |     +-test
        |           +-statistics-+
        |           |            +-build
        |           |            +-doc
        |           |            +-test
        |           +-charting-+
        |           |          +-build
        |           |          +-doc
        |           |          +-test
        |           +-distributedComputing-+
        |           |                      +-build
        |           |                      +-doc
        |           |                      +-test
        |           +-widgets-+
        |                     +-build
        |                     +-doc
        |                     +-test
        +-productLines-+
        |              +-flagshipProduct-+
        |              |                 +-coolFeature
        |              |                 +-anotherCoolFeature
        |              |                 +-build
        |              |                 +-doc
        |              |                 +-test
        |              +-coolNewProduct-+
        |                               +-build
        |                               +-doc
        |                               +-test
        +-project-+
                  +-bigImportantCustomer-+
                  |                      +-bespokeProjectOne
                  |                      +-bespokeProjectTwo
                  +-anotherImportantCustomer-+
                                             +-anotherBespokeProject

아이디어는 저장소의 구조를 사용하여 엔지니어링 팀 간의 의사 소통을 구조화하는 데 도움이되었습니다. 비즈니스의 고객 대면 부분과 다양한 기타 이해 관계자 및 도메인 전문가.

재치 : "프로젝트"디렉토리 중 하나에있는 소스 문서는 한 번만 사용됩니다 (그리고 돈을 버는 것). "productLines"디렉토리 중 하나에있는 문서는 해당 특정 라인의 제품이 판매 될 때마다 여러 번 돈을받습니다. "라이브러리"디렉토리 중 하나에있는 문서는이를 사용하는 모든 제품이 판매되는 횟수만큼 돈을 벌 수 있습니다.

비용 상각 개념을 명시 적으로 작성하고 비즈니스 전체에서 소스 문서 재사용에 대한 지원을 구축하는 데 도움이됩니다.

이상적인 세상에서 비즈니스의 일부에 직면 한 고객은이 구조를 사용하여 프리젠 테이션 및 기타 영업 자료를 저장하므로 개발자는 관련 제품 디렉토리와 함께 고객의 기대치가 무엇인지 확인할 수 있으며 고객이 직면 한 동료는 개발을 추적 할 수 있습니다 그들이 판매하는 기능과 제품에 대한 진행.

또한 빌드 자동화 도구가 작동 할 수있는 공통 구조가 있음을 의미합니다. (빌드 스크립트는 소스 트리에서 각 구성 요소의 빌드 방법을 지정하는 구성 파일을 찾는 "빌드"폴더를 찾습니다. 문서 생성 및 테스트에서 유사한 프로세스가 발생합니다). 다시, 이상적인 세상에서, 조직의 웹 사이트와 다른 마케팅 자료는 같은 방식으로 구축 될 수 있습니다.

하나의 마지막 메모로; 지속적인 통합 시스템은 빌드를 트리거해야한다는 것을 알고 있습니다. 정적 분석; 스모크 테스트 및 단위 테스트는 트렁크가 수정 될 때마다, "태그"분기가 수정 될 때마다, 그리고 "AUTOMATED"분기 분기가 수정 될 때마다 실행됩니다. 이러한 방식으로 개별 개발자는 중요한 기능인 IMHO와 같은 개인 지사와 함께 CI 시스템을 사용할 수 있습니다.


0

"문서 폴더"를 의미한다고 생각합니다. 고객 / 응용 프로그램 이후 "개발 및 유지 관리"의 끝 부분에서 부문별로 문서를 구성합니다.

예 : 프로젝트

  • 재정적 인

    • 웹 애플리케이션

      • 앱 알파

         - source
         - functional docs
         - etc etc (testing, meeting with customer)
        
      • 앱 베타

         - functional docs
         - etc etc (testing, meeting with customer)
        
    • 데스크탑 소프트웨어
  • 에너지 및 유틸리티
  • 블라 블라

버전 관리는 어떻습니까? 알파 문서가 진행될 때 베타 문서가되지 않습니까?
— JBR 윌킨슨

로컬 데스크톱에서는 모든 버전의 복사본이 모두 없습니다. 코드, 문서 등의 마지막 안정적인 버전이 있습니다. 다른 이전 버전이 필요한 경우 Subversion et similia (다른 프로젝트로 저장)로이 버전을 다운로드하십시오. 분야 : 앱 Beta_version_XYZ (재무 인 경우)
— alepuzio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.