OpenSourcing을 위해 코드를 준비하고 GitHub에 배치하려면 어떻게해야합니까?


9

몇 주 후에 프로젝트가 완료 될 예정이며 다른 사람들이 사용할 수 있도록 코드를 준비하고 싶습니다.

모든 것을 GitHub에 게시하여 사람들이 조정할 수 있고 더 좋게 만들 것입니다.

내가 묻는 것이 무엇인지, 다른 사람들이 사용할 수 있도록 코드가 충분히 문서화되고 작성되도록하는 가장 좋은 방법은 무엇입니까?

나는 당신이 항상 모든 것을 언급해야한다는 것을 알고 있으며 모든 방법에 대해 @params 기능을 넣을 것이지만 일반적인 다른 팁이 있습니까?


답변:


12
  • 리포지토리의 루트에 README.txt 파일이 있는지 확인하여 사람들이 파일을 작성하는 방법에 대한 지침을 가리 키도록합니다. 지시 사항은 해당 파일에 있거나 별도의 파일 또는 위키 페이지에있을 수 있습니다.
  • 이상적으로는 단일 명령으로 코드를 완전히 빌드하고 테스트 할 수 있도록 만드십시오. 많은 수동 단계가 필요하지 않습니다.
  • 코드 테스트가 있는지 확인하십시오. 이는 다른 개발자가 코드 사용 방법을 확인할 수있는 편리한 장소를 제공하며 코드를 수정하는 사람들에게 안전망을 제공합니다. 코드를 편집 한 다음 스위트를 실행하여 무언가를 파헤 쳤는지 알면 귀중한 것입니다.
  • 일반적인 코딩 표준을 따르거나 사용하는 표준을 게시하십시오.
  • 코드에서 OO를 사용하는 경우 최소한 모든 공용 메소드 및 속성에 충분한 문서가 있는지 확인하십시오.
  • 코드에서 어떤 라이센스를 사용하는지 명확하게 확인하십시오. 일반적으로 이는 LICENSE.txt 파일을 포함하거나 특정 라이센스에 필요한 메커니즘을 따릅니다. 또한 라이센스에 대해 신중하게 선택하십시오. GPL 만 사용하면 안됩니다. 마찬가지로 BSD, MIT 또는 Apache 만 사용하면 안됩니다. GPL과 비 GPL 라이센스의 근본적인 차이점을 이해하기 위해 한 시간을 투자하십시오.
  • 하드 코딩 된 사용자 이름, 비밀번호, 이메일 주소, IP 주소, API 키 등과 같은 민감한 정보를 코드에서 모두 제거하십시오 (제안을 위해 Hakan Deryal에게 감사드립니다).

좋은 조언. 추가해야 할 또 다른 사항 : 비밀번호 / api 키와 같은 개인 정보가 있으면 제거하십시오.
Hakan Deryal

코드에 민감한 정보가있는 경우, 이미 버전 제어를 사용하기 시작한 경우 과거 커밋에서도 해당 정보를 제거해야합니다. 가장 쉬운 방법은 공개 버전을위한 완전히 새로운 저장소를 만드는 것이지만 최선의 방법은 아닙니다.
yakiv

3

소스 파일의 문서는 항상 좋지만 웹 사이트에 추가 문서를 게시해야합니다. 목표, 작동 방식, 향후 계획에 대해 설명하고 기여를 쉽게하려고 노력하십시오 (그렇지 않으면 아무도 도움이되지 않습니다).

소스 코드 문서 만있는 프로젝트에서 작업하는 것은 항상 실망스러운 일입니다.


1

내가 묻는 것이 무엇인지, 다른 사람들이 사용할 수 있도록 코드가 충분히 문서화되고 작성되도록하는 가장 좋은 방법은 무엇입니까?

오픈 소스로서 가장 중요한 의견은 저작권 및 라이센스 계약 의견입니다. 모든 파일의 시작 부분에 큰 주석을 달기보다는 저작권을 간단히 지정하고 루트 디렉토리의 license.txt를 읽는 짧고 달콤한 주석을 사용할 수 있습니다.

나는 당신이 항상 모든 것을 언급해야한다는 것을 알고 있으며 모든 방법에 대해 @params 기능을 넣을 것이지만 일반적인 다른 팁이 있습니까?

모든 것을 주석으로 처리 하시겠습니까? 아닙니다. 실제로 주석이 필요한 코드를 주석으로 처리하십시오. 드물게 의견을 말하십시오. 코드 청크의 잠재적 사용자로서, 다음 두 가지 버전의 클래스 정의 중 어떤 것을보고 싶습니까?

버전 A :

class Foo {
private:
   SomeType some_name; //!< State machine state

public:
   ...

   /**
    * Get the some_name data member.
    * @return Value of the some_name data member.
    */
   SomeType get_some_name () const { return some_name; }

   ...
};

버전 B :

/**
 * A big long comment that describes the class. This class header comment is very
 * important, but also is the most overlooked. The class is not self-documenting.
 * Why is that class here? Your comments inside the class will say what individual parts
 * do, but not what the class as a whole does. For a class, the whole is, or should be,
 * greater than the parts. Do not forget to write this very important comment.
 */
class Foo {
private:

   /**
    * A big long comment that describes the variable. Just because the variable is
    * private doesn't mean you don't have to describe it. You might have getters and
    * setters for the variable, for example.
    */
   SomeType some_name;

public:
   ...

   // Getters and setters
   ...

   // Getter for some_name. Note that there is no setter.
   SomeType get_some_name () const { return some_name; }

   ...

};

버전 A에서는 클래스 자체를 제외한 모든 것을 문서화했습니다. 일반적으로 수업은 자체 문서화가 아닙니다. 버전 A에있는 주석은 전혀 쓸모가 없으며, 쓸모없는 것보다 더 나쁩니다. 이것이 "모든 의견"태도의 핵심 문제입니다. 개인 데이터 멤버에 대한이 간결한 설명은 아무 것도 전달하지 않으며 게터에 대한 doxygen 설명은 음의 값을 갖습니다. 게터 get_some_name()는 실제로 주석이 필요하지 않습니다. 그것이 무엇을하고 그것이 무엇을 리턴하는지는 코드에서 명백히 명백합니다. 세터가 없다는 것-그것이 없기 때문에 추론해야합니다.

버전 B에서는 주석이 필요한 것을 문서화했습니다. getter에는 doxygen 주석이 없지만 setter가 없다는 주석이 있습니다.

의견 수를 세고, 코드에 대한 변경 사항을 반영하기 위해 의견이 자주 유지되지 않도록주의하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.