diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000000..4f4ee9d6cf9 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,425 @@ +# Contribution guide + +We appreciate your thought to contribute to open source. :heart: + +If you'd like to suggest a change in the tutorials or the workflow, please [raise an issue](https://github.com/firstcontributions/first-contributions/issues/new). We can have a discussion to better understand the problem, get more people involved and make a collective decision. + +If you're making changes to a translation, please request a review from our previous contributors who has translated to the respective translation. Our goal is for all translations to have the same content as the English one (`Readme.md`) (Except for links to other translations. We realised that it doesn't add much value) + +### Our reviewers :sparkles: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ हिन्दी + + मराठी + + မြန်မာ + + Bahasa Indonesia + + Català + + Français + + Español +
+ @arshadkazmi42 + + @bantya + + @lwinkyawmyat + + @hahn + + @Sergih28 + + @LePetitRenard + + @yirini +
+ arshadkazmi42 + + bantya             + + lwinkyawmyat + + hahn                + + Sergih28           + + LePetitRenard + + yirini             +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Nederlands + + Русский язык + + Slovenčina + + 日本語 + + Tiếng Việt + + Polski + + فارسی +
+ @MJMajoor + + @ayanovsk + + @hercegtomas + + @cbondurant + + @tranlyvu + + @P1X3L0V4 + + @ThirdScript +
+ MJMajoor + + ayanovsk + + hercegtomas + + cbondurant + + tranlyvu + + P1X3L0V4 + + ThirdScript +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Lietuvių kalba + + 한국어 + + Deutsch + + 中文(Simplified) + + 中文(Traditional) + + ελληνικά + + العربية +
+ @neone35 + + @espozbob + + @lkreimann + + @yuzhoujr + + @WeiChienHsu + + @stefanoszisidis + + @iMouath +
+ neone35 + + espozbob + + lkreimann + + yuzhoujr + + WeiChienHsu + + stefanoszisidis + + iMouath +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Українська + + Português (Brasil) + + Português (Portugal) + + Italiano + + ภาษาไทย + + Galego + + नेपाली +
+ @ckopnio + + @OtacilioN + + @nunofca + + @platipo + + @AimeTPGM + + @siderio2 + + @milap-neupane +
+ ckopnio + + OtacilioN + + nunofca + + platipo + + AimeTPGM + + siderio2 + + milap-neupane +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ اردو + + বাংলা + + Limba Română + + English + + English (Pirate) + + Türkçe + + עברית +
+ @Shhzdmrz + + @cse031sust02 + + @dp97 + + @sara-02 + + @lukeoliff + + @yamac-kurtulus + + @TomerPacific +
+ Shhzdmrz + + cse031sust02 + + dp97 + + sara-02 + + lukeoliff + + yamac-kurtulus + + TomerPacific +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Slovenščina + + Svenska + + Dansk + + المصرية + + Қазақша +
+ @CoderKlemen + + @jcer + + @7013145 + + @MichaelKMalak + + @kurshakuz +
+ CoderKlemen + + jcer + + 7013145 + + MichaelKMalak + + kurshakuz +
+ + diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000000..7eeb142fe35 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,20 @@ + + +🐞 **Problem** + + + +🎯 **Goal** + + + +💡 **Possible solutions** + + +📋 **Steps to solve the problem** + +* Comment below about what you've started working on. +* Add, commit, push your changes. +* Submit a pull request and add this in comments - `Addresses #` +* Ask for reviews in comments section of pull request. +* Celebrate your contribution to this project. 🎉 diff --git a/.github/actions/automerge/action.yml b/.github/actions/automerge/action.yml new file mode 100644 index 00000000000..ae9341c3663 --- /dev/null +++ b/.github/actions/automerge/action.yml @@ -0,0 +1,12 @@ +name: "Automerging PRs" +description: "Automatically merges any PR that has no conflicts and changed the file Contributors.md" + +inputs: + message: + description: "The message a new contributor will get after having merged his/her PR" + default: "Thank you for your pull request. I am happy to merge it right away!" + required: true + +runs: + using: "node12" + main: "dist/index.js" \ No newline at end of file diff --git a/.github/actions/automerge/dist/index.js b/.github/actions/automerge/dist/index.js new file mode 100644 index 00000000000..56830a0ce34 --- /dev/null +++ b/.github/actions/automerge/dist/index.js @@ -0,0 +1,25410 @@ +module.exports = +/******/ (function(modules, runtime) { // webpackBootstrap +/******/ "use strict"; +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ __webpack_require__.ab = __dirname + "/"; +/******/ +/******/ // the startup function +/******/ function startup() { +/******/ // Load entry module and return exports +/******/ return __webpack_require__(998); +/******/ }; +/******/ +/******/ // run startup +/******/ return startup(); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ 16: +/***/ (function(module) { + +module.exports = require("tls"); + +/***/ }), + +/***/ 17: +/***/ (function(module) { + +module.exports = removeHook + +function removeHook (state, name, method) { + if (!state.registry[name]) { + return + } + + var index = state.registry[name] + .map(function (registered) { return registered.orig }) + .indexOf(method) + + if (index === -1) { + return + } + + state.registry[name].splice(index, 1) +} + + +/***/ }), + +/***/ 27: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = getPreviousPage + +const getPage = __webpack_require__(242) + +function getPreviousPage (octokit, link, headers) { + return getPage(octokit, link, 'prev', headers) +} + + +/***/ }), + +/***/ 36: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +var net = __webpack_require__(937); +var tls = __webpack_require__(16); +var http = __webpack_require__(605); +var https = __webpack_require__(211); +var events = __webpack_require__(614); +var assert = __webpack_require__(357); +var util = __webpack_require__(853); + + +exports.httpOverHttp = httpOverHttp; +exports.httpsOverHttp = httpsOverHttp; +exports.httpOverHttps = httpOverHttps; +exports.httpsOverHttps = httpsOverHttps; + + +function httpOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; +} + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; +} + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + + +function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + + self.on('free', function onFree(socket, host, port, localAddress) { + var options = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options.host && pending.port === options.port) { + // Detect the request to connect same origin server, + // reuse the connection. + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); +} +util.inherits(TunnelingAgent, events.EventEmitter); + +TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); + + if (self.sockets.length >= this.maxSockets) { + // We are over limit so we'll add it to the queue. + self.requests.push(options); + return; + } + + // If we are under maxSockets create a new one. + self.createSocket(options, function(socket) { + socket.on('free', onFree); + socket.on('close', onCloseOrRemove); + socket.on('agentRemove', onCloseOrRemove); + req.onSocket(socket); + + function onFree() { + self.emit('free', socket, options); + } + + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener('free', onFree); + socket.removeListener('close', onCloseOrRemove); + socket.removeListener('agentRemove', onCloseOrRemove); + } + }); +}; + +TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: 'CONNECT', + path: options.host + ':' + options.port, + agent: false, + headers: { + host: options.host + ':' + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers['Proxy-Authorization'] = 'Basic ' + + new Buffer(connectOptions.proxyAuth).toString('base64'); + } + + debug('making CONNECT request'); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; // for v0.6 + connectReq.once('response', onResponse); // for v0.6 + connectReq.once('upgrade', onUpgrade); // for v0.6 + connectReq.once('connect', onConnect); // for v0.7 or later + connectReq.once('error', onError); + connectReq.end(); + + function onResponse(res) { + // Very hacky. This is necessary to avoid http-parser leaks. + res.upgrade = true; + } + + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + + if (res.statusCode !== 200) { + debug('tunneling socket could not be established, statusCode=%d', + res.statusCode); + socket.destroy(); + var error = new Error('tunneling socket could not be established, ' + + 'statusCode=' + res.statusCode); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug('got illegal response body from proxy'); + socket.destroy(); + var error = new Error('got illegal response body from proxy'); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + debug('tunneling connection has established'); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); + } + + function onError(cause) { + connectReq.removeAllListeners(); + + debug('tunneling socket could not be established, cause=%s\n', + cause.message, cause.stack); + var error = new Error('tunneling socket could not be established, ' + + 'cause=' + cause.message); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + } +}; + +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + + var pending = this.requests.shift(); + if (pending) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createSocket(pending, function(socket) { + pending.request.onSocket(socket); + }); + } +}; + +function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader('host'); + var tlsOptions = mergeOptions({}, self.options, { + socket: socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host + }); + + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); +} + + +function toOptions(host, port, localAddress) { + if (typeof host === 'string') { // since v0.10 + return { + host: host, + port: port, + localAddress: localAddress + }; + } + return host; // for v0.11 or later +} + +function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === 'object') { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== undefined) { + target[k] = overrides[k]; + } + } + } + } + return target; +} + + +var debug; +if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'string') { + args[0] = 'TUNNEL: ' + args[0]; + } else { + args.unshift('TUNNEL:'); + } + console.error.apply(console, args); + } +} else { + debug = function() {}; +} +exports.debug = debug; // for test + + +/***/ }), + +/***/ 43: +/***/ (function(module) { + +"use strict"; + +module.exports = /^#!.*/; + + +/***/ }), + +/***/ 81: +/***/ (function(module, exports) { + +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var R = 0 + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++ +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' +var NUMERICIDENTIFIERLOOSE = R++ +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++ +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++ +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')' + +var MAINVERSIONLOOSE = R++ +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++ +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +var PRERELEASEIDENTIFIERLOOSE = R++ +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++ +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' + +var PRERELEASELOOSE = R++ +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++ +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++ +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++ +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?' + +src[FULL] = '^' + FULLPLAIN + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?' + +var LOOSE = R++ +src[LOOSE] = '^' + LOOSEPLAIN + '$' + +var GTLT = R++ +src[GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++ +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +var XRANGEIDENTIFIER = R++ +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' + +var XRANGEPLAIN = R++ +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGEPLAINLOOSE = R++ +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGE = R++ +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' +var XRANGELOOSE = R++ +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++ +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++ +src[LONETILDE] = '(?:~>?)' + +var TILDETRIM = R++ +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +var TILDE = R++ +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' +var TILDELOOSE = R++ +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++ +src[LONECARET] = '(?:\\^)' + +var CARETTRIM = R++ +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +var CARET = R++ +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' +var CARETLOOSE = R++ +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++ +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' +var COMPARATOR = R++ +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++ +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++ +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$' + +var HYPHENRANGELOOSE = R++ +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +var STAR = R++ +src[STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[LOOSE] : re[FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compare(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.rcompare(a, b, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY) { + return true + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return thisComparators.every(function (thisComparator) { + return range.set.some(function (rangeComparators) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + }) + }) +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[TILDELOOSE] : re[TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[CARETLOOSE] : re[CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], '') +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version) { + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + var match = version.match(re[COERCE]) + + if (match == null) { + return null + } + + return parse(match[1] + + '.' + (match[2] || '0') + + '.' + (match[3] || '0')) +} + + +/***/ }), + +/***/ 86: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const path = __webpack_require__(622); +const pathKey = __webpack_require__(744); + +module.exports = opts => { + opts = Object.assign({ + cwd: process.cwd(), + path: process.env[pathKey()] + }, opts); + + let prev; + let pth = path.resolve(opts.cwd); + const ret = []; + + while (prev !== pth) { + ret.push(path.join(pth, 'node_modules/.bin')); + prev = pth; + pth = path.resolve(pth, '..'); + } + + // ensure the running `node` binary is used + ret.push(path.dirname(process.execPath)); + + return ret.concat(opts.path).join(path.delimiter); +}; + +module.exports.env = opts => { + opts = Object.assign({ + env: process.env + }, opts); + + const env = Object.assign({}, opts.env); + const path = pathKey({env}); + + opts.path = env[path]; + env[path] = module.exports(opts); + + return env; +}; + + +/***/ }), + +/***/ 87: +/***/ (function(module) { + +module.exports = require("os"); + +/***/ }), + +/***/ 93: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + + +module.exports = validate; + +const { RequestError } = __webpack_require__(754); +const get = __webpack_require__(586); +const set = __webpack_require__(224); + +function validate(octokit, options) { + if (!options.request.validate) { + return; + } + const { validate: params } = options.request; + + Object.keys(params).forEach(parameterName => { + const parameter = get(params, parameterName); + + const expectedType = parameter.type; + let parentParameterName; + let parentValue; + let parentParamIsPresent = true; + let parentParameterIsArray = false; + + if (/\./.test(parameterName)) { + parentParameterName = parameterName.replace(/\.[^.]+$/, ""); + parentParameterIsArray = parentParameterName.slice(-2) === "[]"; + if (parentParameterIsArray) { + parentParameterName = parentParameterName.slice(0, -2); + } + parentValue = get(options, parentParameterName); + parentParamIsPresent = + parentParameterName === "headers" || + (typeof parentValue === "object" && parentValue !== null); + } + + const values = parentParameterIsArray + ? (get(options, parentParameterName) || []).map( + value => value[parameterName.split(/\./).pop()] + ) + : [get(options, parameterName)]; + + values.forEach((value, i) => { + const valueIsPresent = typeof value !== "undefined"; + const valueIsNull = value === null; + const currentParameterName = parentParameterIsArray + ? parameterName.replace(/\[\]/, `[${i}]`) + : parameterName; + + if (!parameter.required && !valueIsPresent) { + return; + } + + // if the parent parameter is of type object but allows null + // then the child parameters can be ignored + if (!parentParamIsPresent) { + return; + } + + if (parameter.allowNull && valueIsNull) { + return; + } + + if (!parameter.allowNull && valueIsNull) { + throw new RequestError( + `'${currentParameterName}' cannot be null`, + 400, + { + request: options + } + ); + } + + if (parameter.required && !valueIsPresent) { + throw new RequestError( + `Empty value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + + // parse to integer before checking for enum + // so that string "1" will match enum with number 1 + if (expectedType === "integer") { + const unparsedValue = value; + value = parseInt(value, 10); + if (isNaN(value)) { + throw new RequestError( + `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( + unparsedValue + )} is NaN`, + 400, + { + request: options + } + ); + } + } + + if (parameter.enum && parameter.enum.indexOf(String(value)) === -1) { + throw new RequestError( + `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + + if (parameter.validation) { + const regex = new RegExp(parameter.validation); + if (!regex.test(value)) { + throw new RequestError( + `Invalid value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + } + + if (expectedType === "object" && typeof value === "string") { + try { + value = JSON.parse(value); + } catch (exception) { + throw new RequestError( + `JSON parse error of value for parameter '${currentParameterName}': ${JSON.stringify( + value + )}`, + 400, + { + request: options + } + ); + } + } + + set(options, parameter.mapTo || currentParameterName, value); + }); + }); + + return options; +} + + +/***/ }), + +/***/ 94: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = getLastPage + +const getPage = __webpack_require__(242) + +function getLastPage (octokit, link, headers) { + return getPage(octokit, link, 'last', headers) +} + + +/***/ }), + +/***/ 100: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + + +const path = __webpack_require__(622); +const which = __webpack_require__(322); +const pathKey = __webpack_require__(744)(); + +function resolveCommandAttempt(parsed, withoutPathExt) { + const cwd = process.cwd(); + const hasCustomCwd = parsed.options.cwd != null; + + // If a custom `cwd` was specified, we need to change the process cwd + // because `which` will do stat calls but does not support a custom cwd + if (hasCustomCwd) { + try { + process.chdir(parsed.options.cwd); + } catch (err) { + /* Empty */ + } + } + + let resolved; + + try { + resolved = which.sync(parsed.command, { + path: (parsed.options.env || process.env)[pathKey], + pathExt: withoutPathExt ? path.delimiter : undefined, + }); + } catch (e) { + /* Empty */ + } finally { + process.chdir(cwd); + } + + // If we successfully resolved, ensure that an absolute path is returned + // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it + if (resolved) { + resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); + } + + return resolved; +} + +function resolveCommand(parsed) { + return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); +} + +module.exports = resolveCommand; + + +/***/ }), + +/***/ 129: +/***/ (function(module) { + +module.exports = require("child_process"); + +/***/ }), + +/***/ 134: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var Stream = _interopDefault(__webpack_require__(794)); +var http = _interopDefault(__webpack_require__(605)); +var Url = _interopDefault(__webpack_require__(835)); +var https = _interopDefault(__webpack_require__(211)); +var zlib = _interopDefault(__webpack_require__(761)); + +// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js + +// fix for "Readable" isn't a named export issue +const Readable = Stream.Readable; + +const BUFFER = Symbol('buffer'); +const TYPE = Symbol('type'); + +class Blob { + constructor() { + this[TYPE] = ''; + + const blobParts = arguments[0]; + const options = arguments[1]; + + const buffers = []; + let size = 0; + + if (blobParts) { + const a = blobParts; + const length = Number(a.length); + for (let i = 0; i < length; i++) { + const element = a[i]; + let buffer; + if (element instanceof Buffer) { + buffer = element; + } else if (ArrayBuffer.isView(element)) { + buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); + } else if (element instanceof ArrayBuffer) { + buffer = Buffer.from(element); + } else if (element instanceof Blob) { + buffer = element[BUFFER]; + } else { + buffer = Buffer.from(typeof element === 'string' ? element : String(element)); + } + size += buffer.length; + buffers.push(buffer); + } + } + + this[BUFFER] = Buffer.concat(buffers); + + let type = options && options.type !== undefined && String(options.type).toLowerCase(); + if (type && !/[^\u0020-\u007E]/.test(type)) { + this[TYPE] = type; + } + } + get size() { + return this[BUFFER].length; + } + get type() { + return this[TYPE]; + } + text() { + return Promise.resolve(this[BUFFER].toString()); + } + arrayBuffer() { + const buf = this[BUFFER]; + const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + return Promise.resolve(ab); + } + stream() { + const readable = new Readable(); + readable._read = function () {}; + readable.push(this[BUFFER]); + readable.push(null); + return readable; + } + toString() { + return '[object Blob]'; + } + slice() { + const size = this.size; + + const start = arguments[0]; + const end = arguments[1]; + let relativeStart, relativeEnd; + if (start === undefined) { + relativeStart = 0; + } else if (start < 0) { + relativeStart = Math.max(size + start, 0); + } else { + relativeStart = Math.min(start, size); + } + if (end === undefined) { + relativeEnd = size; + } else if (end < 0) { + relativeEnd = Math.max(size + end, 0); + } else { + relativeEnd = Math.min(end, size); + } + const span = Math.max(relativeEnd - relativeStart, 0); + + const buffer = this[BUFFER]; + const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); + const blob = new Blob([], { type: arguments[2] }); + blob[BUFFER] = slicedBuffer; + return blob; + } +} + +Object.defineProperties(Blob.prototype, { + size: { enumerable: true }, + type: { enumerable: true }, + slice: { enumerable: true } +}); + +Object.defineProperty(Blob.prototype, Symbol.toStringTag, { + value: 'Blob', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * fetch-error.js + * + * FetchError interface for operational errors + */ + +/** + * Create FetchError instance + * + * @param String message Error message for human + * @param String type Error type for machine + * @param String systemError For Node.js system error + * @return FetchError + */ +function FetchError(message, type, systemError) { + Error.call(this, message); + + this.message = message; + this.type = type; + + // when err.type is `system`, err.code contains system error code + if (systemError) { + this.code = this.errno = systemError.code; + } + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +FetchError.prototype = Object.create(Error.prototype); +FetchError.prototype.constructor = FetchError; +FetchError.prototype.name = 'FetchError'; + +let convert; +try { + convert = __webpack_require__(162).convert; +} catch (e) {} + +const INTERNALS = Symbol('Body internals'); + +// fix an issue where "PassThrough" isn't a named export for node <10 +const PassThrough = Stream.PassThrough; + +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +function Body(body) { + var _this = this; + + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$size = _ref.size; + + let size = _ref$size === undefined ? 0 : _ref$size; + var _ref$timeout = _ref.timeout; + let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; + + if (body == null) { + // body is undefined or null + body = null; + } else if (isURLSearchParams(body)) { + // body is a URLSearchParams + body = Buffer.from(body.toString()); + } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { + // body is ArrayBuffer + body = Buffer.from(body); + } else if (ArrayBuffer.isView(body)) { + // body is ArrayBufferView + body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); + } else if (body instanceof Stream) ; else { + // none of the above + // coerce to string then buffer + body = Buffer.from(String(body)); + } + this[INTERNALS] = { + body, + disturbed: false, + error: null + }; + this.size = size; + this.timeout = timeout; + + if (body instanceof Stream) { + body.on('error', function (err) { + const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); + _this[INTERNALS].error = error; + }); + } +} + +Body.prototype = { + get body() { + return this[INTERNALS].body; + }, + + get bodyUsed() { + return this[INTERNALS].disturbed; + }, + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + arrayBuffer() { + return consumeBody.call(this).then(function (buf) { + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + }); + }, + + /** + * Return raw response as Blob + * + * @return Promise + */ + blob() { + let ct = this.headers && this.headers.get('content-type') || ''; + return consumeBody.call(this).then(function (buf) { + return Object.assign( + // Prevent copying + new Blob([], { + type: ct.toLowerCase() + }), { + [BUFFER]: buf + }); + }); + }, + + /** + * Decode response as json + * + * @return Promise + */ + json() { + var _this2 = this; + + return consumeBody.call(this).then(function (buffer) { + try { + return JSON.parse(buffer.toString()); + } catch (err) { + return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); + } + }); + }, + + /** + * Decode response as text + * + * @return Promise + */ + text() { + return consumeBody.call(this).then(function (buffer) { + return buffer.toString(); + }); + }, + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + buffer() { + return consumeBody.call(this); + }, + + /** + * Decode response as text, while automatically detecting the encoding and + * trying to decode to UTF-8 (non-spec api) + * + * @return Promise + */ + textConverted() { + var _this3 = this; + + return consumeBody.call(this).then(function (buffer) { + return convertBody(buffer, _this3.headers); + }); + } +}; + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true } +}); + +Body.mixIn = function (proto) { + for (const name of Object.getOwnPropertyNames(Body.prototype)) { + // istanbul ignore else: future proof + if (!(name in proto)) { + const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); + Object.defineProperty(proto, name, desc); + } + } +}; + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +function consumeBody() { + var _this4 = this; + + if (this[INTERNALS].disturbed) { + return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); + } + + this[INTERNALS].disturbed = true; + + if (this[INTERNALS].error) { + return Body.Promise.reject(this[INTERNALS].error); + } + + let body = this.body; + + // body is null + if (body === null) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is blob + if (isBlob(body)) { + body = body.stream(); + } + + // body is buffer + if (Buffer.isBuffer(body)) { + return Body.Promise.resolve(body); + } + + // istanbul ignore if: should never happen + if (!(body instanceof Stream)) { + return Body.Promise.resolve(Buffer.alloc(0)); + } + + // body is stream + // get ready to actually consume the body + let accum = []; + let accumBytes = 0; + let abort = false; + + return new Body.Promise(function (resolve, reject) { + let resTimeout; + + // allow timeout on slow response body + if (_this4.timeout) { + resTimeout = setTimeout(function () { + abort = true; + reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); + }, _this4.timeout); + } + + // handle stream errors + body.on('error', function (err) { + if (err.name === 'AbortError') { + // if the request was aborted, reject with this Error + abort = true; + reject(err); + } else { + // other errors, such as incorrect content-encoding + reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + + body.on('data', function (chunk) { + if (abort || chunk === null) { + return; + } + + if (_this4.size && accumBytes + chunk.length > _this4.size) { + abort = true; + reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); + return; + } + + accumBytes += chunk.length; + accum.push(chunk); + }); + + body.on('end', function () { + if (abort) { + return; + } + + clearTimeout(resTimeout); + + try { + resolve(Buffer.concat(accum, accumBytes)); + } catch (err) { + // handle streams that have accumulated too much data (issue #414) + reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); + } + }); + }); +} + +/** + * Detect buffer encoding and convert to target encoding + * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding + * + * @param Buffer buffer Incoming buffer + * @param String encoding Target encoding + * @return String + */ +function convertBody(buffer, headers) { + if (typeof convert !== 'function') { + throw new Error('The package `encoding` must be installed to use the textConverted() function'); + } + + const ct = headers.get('content-type'); + let charset = 'utf-8'; + let res, str; + + // header + if (ct) { + res = /charset=([^;]*)/i.exec(ct); + } + + // no charset in content type, peek at response body for at most 1024 bytes + str = buffer.slice(0, 1024).toString(); + + // html5 + if (!res && str) { + res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; + + this[MAP] = Object.create(null); + + if (init instanceof Headers) { + const rawHeaders = init.raw(); + const headerNames = Object.keys(rawHeaders); + + for (const headerName of headerNames) { + for (const value of rawHeaders[headerName]) { + this.append(headerName, value); + } + } + + return; + } + + // We don't worry about converting prop to ByteString here as append() + // will handle it. + if (init == null) ; else if (typeof init === 'object') { + const method = init[Symbol.iterator]; + if (method != null) { + if (typeof method !== 'function') { + throw new TypeError('Header pairs must be iterable'); + } + + // sequence> + // Note: per spec we have to first exhaust the lists then process them + const pairs = []; + for (const pair of init) { + if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { + throw new TypeError('Each header pair must be iterable'); + } + pairs.push(Array.from(pair)); + } + + for (const pair of pairs) { + if (pair.length !== 2) { + throw new TypeError('Each header pair must be a name/value tuple'); + } + this.append(pair[0], pair[1]); + } + } else { + // record + for (const key of Object.keys(init)) { + const value = init[key]; + this.append(key, value); + } + } + } else { + throw new TypeError('Provided initializer must be an object'); + } + } + + /** + * Return combined header value given name + * + * @param String name Header name + * @return Mixed + */ + get(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key === undefined) { + return null; + } + + return this[MAP][key].join(', '); + } + + /** + * Iterate over all headers + * + * @param Function callback Executed for each item with parameters (value, name, thisArg) + * @param Boolean thisArg `this` context for callback function + * @return Void + */ + forEach(callback) { + let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + let pairs = getHeaders(this); + let i = 0; + while (i < pairs.length) { + var _pairs$i = pairs[i]; + const name = _pairs$i[0], + value = _pairs$i[1]; + + callback.call(thisArg, value, name, this); + pairs = getHeaders(this); + i++; + } + } + + /** + * Overwrite header values given name + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + set(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + this[MAP][key !== undefined ? key : name] = [value]; + } + + /** + * Append a value onto existing header + * + * @param String name Header name + * @param String value Header value + * @return Void + */ + append(name, value) { + name = `${name}`; + value = `${value}`; + validateName(name); + validateValue(value); + const key = find(this[MAP], name); + if (key !== undefined) { + this[MAP][key].push(value); + } else { + this[MAP][name] = [value]; + } + } + + /** + * Check for header name existence + * + * @param String name Header name + * @return Boolean + */ + has(name) { + name = `${name}`; + validateName(name); + return find(this[MAP], name) !== undefined; + } + + /** + * Delete all header values given name + * + * @param String name Header name + * @return Void + */ + delete(name) { + name = `${name}`; + validateName(name); + const key = find(this[MAP], name); + if (key !== undefined) { + delete this[MAP][key]; + } + } + + /** + * Return raw headers (non-spec api) + * + * @return Object + */ + raw() { + return this[MAP]; + } + + /** + * Get an iterator on keys. + * + * @return Iterator + */ + keys() { + return createHeadersIterator(this, 'key'); + } + + /** + * Get an iterator on values. + * + * @return Iterator + */ + values() { + return createHeadersIterator(this, 'value'); + } + + /** + * Get an iterator on entries. + * + * This is the default iterator of the Headers object. + * + * @return Iterator + */ + [Symbol.iterator]() { + return createHeadersIterator(this, 'key+value'); + } +} +Headers.prototype.entries = Headers.prototype[Symbol.iterator]; + +Object.defineProperty(Headers.prototype, Symbol.toStringTag, { + value: 'Headers', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Headers.prototype, { + get: { enumerable: true }, + forEach: { enumerable: true }, + set: { enumerable: true }, + append: { enumerable: true }, + has: { enumerable: true }, + delete: { enumerable: true }, + keys: { enumerable: true }, + values: { enumerable: true }, + entries: { enumerable: true } +}); + +function getHeaders(headers) { + let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; + + const keys = Object.keys(headers[MAP]).sort(); + return keys.map(kind === 'key' ? function (k) { + return k.toLowerCase(); + } : kind === 'value' ? function (k) { + return headers[MAP][k].join(', '); + } : function (k) { + return [k.toLowerCase(), headers[MAP][k].join(', ')]; + }); +} + +const INTERNAL = Symbol('internal'); + +function createHeadersIterator(target, kind) { + const iterator = Object.create(HeadersIteratorPrototype); + iterator[INTERNAL] = { + target, + kind, + index: 0 + }; + return iterator; +} + +const HeadersIteratorPrototype = Object.setPrototypeOf({ + next() { + // istanbul ignore if + if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { + throw new TypeError('Value of `this` is not a HeadersIterator'); + } + + var _INTERNAL = this[INTERNAL]; + const target = _INTERNAL.target, + kind = _INTERNAL.kind, + index = _INTERNAL.index; + + const values = getHeaders(target, kind); + const len = values.length; + if (index >= len) { + return { + value: undefined, + done: true + }; + } + + this[INTERNAL].index = index + 1; + + return { + value: values[index], + done: false + }; + } +}, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); + +Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { + value: 'HeadersIterator', + writable: false, + enumerable: false, + configurable: true +}); + +/** + * Export the Headers object in a form that Node.js can consume. + * + * @param Headers headers + * @return Object + */ +function exportNodeCompatibleHeaders(headers) { + const obj = Object.assign({ __proto__: null }, headers[MAP]); + + // http.request() only supports string as Host header. This hack makes + // specifying custom Host header possible. + const hostHeaderKey = find(headers[MAP], 'Host'); + if (hostHeaderKey !== undefined) { + obj[hostHeaderKey] = obj[hostHeaderKey][0]; + } + + return obj; +} + +/** + * Create a Headers object from an object of headers, ignoring those that do + * not conform to HTTP grammar productions. + * + * @param Object obj Object of headers + * @return Headers + */ +function createHeadersLenient(obj) { + const headers = new Headers(); + for (const name of Object.keys(obj)) { + if (invalidTokenRegex.test(name)) { + continue; + } + if (Array.isArray(obj[name])) { + for (const val of obj[name]) { + if (invalidHeaderCharRegex.test(val)) { + continue; + } + if (headers[MAP][name] === undefined) { + headers[MAP][name] = [val]; + } else { + headers[MAP][name].push(val); + } + } + } else if (!invalidHeaderCharRegex.test(obj[name])) { + headers[MAP][name] = [obj[name]]; + } + } + return headers; +} + +const INTERNALS$1 = Symbol('Response internals'); + +// fix an issue where "STATUS_CODES" aren't a named export for node <10 +const STATUS_CODES = http.STATUS_CODES; + +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Response { + constructor() { + let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + Body.call(this, body, opts); + + const status = opts.status || 200; + const headers = new Headers(opts.headers); + + if (body != null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + this[INTERNALS$1] = { + url: opts.url, + status, + statusText: opts.statusText || STATUS_CODES[status], + headers, + counter: opts.counter + }; + } + + get url() { + return this[INTERNALS$1].url || ''; + } + + get status() { + return this[INTERNALS$1].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; + } + + get redirected() { + return this[INTERNALS$1].counter > 0; + } + + get statusText() { + return this[INTERNALS$1].statusText; + } + + get headers() { + return this[INTERNALS$1].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + return new Response(clone(this), { + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected + }); + } +} + +Body.mixIn(Response.prototype); + +Object.defineProperties(Response.prototype, { + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true } +}); + +Object.defineProperty(Response.prototype, Symbol.toStringTag, { + value: 'Response', + writable: false, + enumerable: false, + configurable: true +}); + +const INTERNALS$2 = Symbol('Request internals'); + +// fix an issue where "format", "parse" aren't a named export for node <10 +const parse_url = Url.parse; +const format_url = Url.format; + +const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; + +/** + * Check if a value is an instance of Request. + * + * @param Mixed input + * @return Boolean + */ +function isRequest(input) { + return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; +} + +function isAbortSignal(signal) { + const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); + return !!(proto && proto.constructor.name === 'AbortSignal'); +} + +/** + * Request class + * + * @param Mixed input Url or Request instance + * @param Object init Custom options + * @return Void + */ +class Request { + constructor(input) { + let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + let parsedURL; + + // normalize input + if (!isRequest(input)) { + if (input && input.href) { + // in order to support Node.js' Url objects; though WHATWG's URL objects + // will fall into this branch also (since their `toString()` will return + // `href` property anyway) + parsedURL = parse_url(input.href); + } else { + // coerce input to a string before attempting to parse + parsedURL = parse_url(`${input}`); + } + input = {}; + } else { + parsedURL = parse_url(input.url); + } + + let method = init.method || input.method || 'GET'; + method = method.toUpperCase(); + + if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { + throw new TypeError('Request with GET/HEAD method cannot have body'); + } + + let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; + + Body.call(this, inputBody, { + timeout: init.timeout || input.timeout || 0, + size: init.size || input.size || 0 + }); + + const headers = new Headers(init.headers || input.headers || {}); + + if (inputBody != null && !headers.has('Content-Type')) { + const contentType = extractContentType(inputBody); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + + let signal = isRequest(input) ? input.signal : null; + if ('signal' in init) signal = init.signal; + + if (signal != null && !isAbortSignal(signal)) { + throw new TypeError('Expected signal to be an instanceof AbortSignal'); + } + + this[INTERNALS$2] = { + method, + redirect: init.redirect || input.redirect || 'follow', + headers, + parsedURL, + signal + }; + + // node-fetch-only options + this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; + this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; + this.counter = init.counter || input.counter || 0; + this.agent = init.agent || input.agent; + } + + get method() { + return this[INTERNALS$2].method; + } + + get url() { + return format_url(this[INTERNALS$2].parsedURL); + } + + get headers() { + return this[INTERNALS$2].headers; + } + + get redirect() { + return this[INTERNALS$2].redirect; + } + + get signal() { + return this[INTERNALS$2].signal; + } + + /** + * Clone this request + * + * @return Request + */ + clone() { + return new Request(this); + } +} + +Body.mixIn(Request.prototype); + +Object.defineProperty(Request.prototype, Symbol.toStringTag, { + value: 'Request', + writable: false, + enumerable: false, + configurable: true +}); + +Object.defineProperties(Request.prototype, { + method: { enumerable: true }, + url: { enumerable: true }, + headers: { enumerable: true }, + redirect: { enumerable: true }, + clone: { enumerable: true }, + signal: { enumerable: true } +}); + +/** + * Convert a Request to Node.js http request options. + * + * @param Request A Request instance + * @return Object The options object to be passed to http.request + */ +function getNodeRequestOptions(request) { + const parsedURL = request[INTERNALS$2].parsedURL; + const headers = new Headers(request[INTERNALS$2].headers); + + // fetch step 1.3 + if (!headers.has('Accept')) { + headers.set('Accept', '*/*'); + } + + // Basic fetch + if (!parsedURL.protocol || !parsedURL.hostname) { + throw new TypeError('Only absolute URLs are supported'); + } + + if (!/^https?:$/.test(parsedURL.protocol)) { + throw new TypeError('Only HTTP(S) protocols are supported'); + } + + if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { + throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); + } + + // HTTP-network-or-cache fetch steps 2.4-2.7 + let contentLengthValue = null; + if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { + contentLengthValue = '0'; + } + if (request.body != null) { + const totalBytes = getTotalBytes(request); + if (typeof totalBytes === 'number') { + contentLengthValue = String(totalBytes); + } + } + if (contentLengthValue) { + headers.set('Content-Length', contentLengthValue); + } + + // HTTP-network-or-cache fetch step 2.11 + if (!headers.has('User-Agent')) { + headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); + } + + // HTTP-network-or-cache fetch step 2.15 + if (request.compress && !headers.has('Accept-Encoding')) { + headers.set('Accept-Encoding', 'gzip,deflate'); + } + + let agent = request.agent; + if (typeof agent === 'function') { + agent = agent(parsedURL); + } + + if (!headers.has('Connection') && !agent) { + headers.set('Connection', 'close'); + } + + // HTTP-network fetch step 4.2 + // chunked encoding is handled by Node.js + + return Object.assign({}, parsedURL, { + method: request.method, + headers: exportNodeCompatibleHeaders(headers), + agent + }); +} + +/** + * abort-error.js + * + * AbortError interface for cancelled requests + */ + +/** + * Create AbortError instance + * + * @param String message Error message for human + * @return AbortError + */ +function AbortError(message) { + Error.call(this, message); + + this.type = 'aborted'; + this.message = message; + + // hide custom error implementation details from end-users + Error.captureStackTrace(this, this.constructor); +} + +AbortError.prototype = Object.create(Error.prototype); +AbortError.prototype.constructor = AbortError; +AbortError.prototype.name = 'AbortError'; + +// fix an issue where "PassThrough", "resolve" aren't a named export for node <10 +const PassThrough$1 = Stream.PassThrough; +const resolve_url = Url.resolve; + +/** + * Fetch function + * + * @param Mixed url Absolute url or Request instance + * @param Object opts Fetch options + * @return Promise + */ +function fetch(url, opts) { + + // allow custom promise + if (!fetch.Promise) { + throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); + } + + Body.Promise = fetch.Promise; + + // wrap http.request into fetch + return new fetch.Promise(function (resolve, reject) { + // build request object + const request = new Request(url, opts); + const options = getNodeRequestOptions(request); + + const send = (options.protocol === 'https:' ? https : http).request; + const signal = request.signal; + + let response = null; + + const abort = function abort() { + let error = new AbortError('The user aborted a request.'); + reject(error); + if (request.body && request.body instanceof Stream.Readable) { + request.body.destroy(error); + } + if (!response || !response.body) return; + response.body.emit('error', error); + }; + + if (signal && signal.aborted) { + abort(); + return; + } + + const abortAndFinalize = function abortAndFinalize() { + abort(); + finalize(); + }; + + // send request + const req = send(options); + let reqTimeout; + + if (signal) { + signal.addEventListener('abort', abortAndFinalize); + } + + function finalize() { + req.abort(); + if (signal) signal.removeEventListener('abort', abortAndFinalize); + clearTimeout(reqTimeout); + } + + if (request.timeout) { + req.once('socket', function (socket) { + reqTimeout = setTimeout(function () { + reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); + finalize(); + }, request.timeout); + }); + } + + req.on('error', function (err) { + reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); + finalize(); + }); + + req.on('response', function (res) { + clearTimeout(reqTimeout); + + const headers = createHeadersLenient(res.headers); + + // HTTP fetch step 5 + if (fetch.isRedirect(res.statusCode)) { + // HTTP fetch step 5.2 + const location = headers.get('Location'); + + // HTTP fetch step 5.3 + const locationURL = location === null ? null : resolve_url(request.url, location); + + // HTTP fetch step 5.5 + switch (request.redirect) { + case 'error': + reject(new FetchError(`redirect mode is set to error: ${request.url}`, 'no-redirect')); + finalize(); + return; + case 'manual': + // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. + if (locationURL !== null) { + // handle corrupted header + try { + headers.set('Location', locationURL); + } catch (err) { + // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request + reject(err); + } + } + break; + case 'follow': + // HTTP-redirect fetch step 2 + if (locationURL === null) { + break; + } + + // HTTP-redirect fetch step 5 + if (request.counter >= request.follow) { + reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 6 (counter increment) + // Create a new Request object. + const requestOpts = { + headers: new Headers(request.headers), + follow: request.follow, + counter: request.counter + 1, + agent: request.agent, + compress: request.compress, + method: request.method, + body: request.body, + signal: request.signal, + timeout: request.timeout + }; + + // HTTP-redirect fetch step 9 + if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { + reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); + finalize(); + return; + } + + // HTTP-redirect fetch step 11 + if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { + requestOpts.method = 'GET'; + requestOpts.body = undefined; + requestOpts.headers.delete('content-length'); + } + + // HTTP-redirect fetch step 15 + resolve(fetch(new Request(locationURL, requestOpts))); + finalize(); + return; + } + } + + // prepare response + res.once('end', function () { + if (signal) signal.removeEventListener('abort', abortAndFinalize); + }); + let body = res.pipe(new PassThrough$1()); + + const response_options = { + url: request.url, + status: res.statusCode, + statusText: res.statusMessage, + headers: headers, + size: request.size, + timeout: request.timeout, + counter: request.counter + }; + + // HTTP-network fetch step 12.1.1.3 + const codings = headers.get('Content-Encoding'); + + // HTTP-network fetch step 12.1.1.4: handle content codings + + // in following scenarios we ignore compression support + // 1. compression support is disabled + // 2. HEAD request + // 3. no Content-Encoding header + // 4. no content response (204) + // 5. content not modified response (304) + if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { + response = new Response(body, response_options); + resolve(response); + return; + } + + // For Node v6+ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + const zlibOptions = { + flush: zlib.Z_SYNC_FLUSH, + finishFlush: zlib.Z_SYNC_FLUSH + }; + + // for gzip + if (codings == 'gzip' || codings == 'x-gzip') { + body = body.pipe(zlib.createGunzip(zlibOptions)); + response = new Response(body, response_options); + resolve(response); + return; + } + + // for deflate + if (codings == 'deflate' || codings == 'x-deflate') { + // handle the infamous raw deflate response from old servers + // a hack for old IIS and Apache servers + const raw = res.pipe(new PassThrough$1()); + raw.once('data', function (chunk) { + // see http://stackoverflow.com/questions/37519828 + if ((chunk[0] & 0x0F) === 0x08) { + body = body.pipe(zlib.createInflate()); + } else { + body = body.pipe(zlib.createInflateRaw()); + } + response = new Response(body, response_options); + resolve(response); + }); + return; + } + + // for br + if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { + body = body.pipe(zlib.createBrotliDecompress()); + response = new Response(body, response_options); + resolve(response); + return; + } + + // otherwise, use response as-is + response = new Response(body, response_options); + resolve(response); + }); + + writeToStream(req, request); + }); +} +/** + * Redirect code matching + * + * @param Number code Status code + * @return Boolean + */ +fetch.isRedirect = function (code) { + return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; +}; + +// expose Promise +fetch.Promise = global.Promise; + +module.exports = exports = fetch; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = exports; +exports.Headers = Headers; +exports.Request = Request; +exports.Response = Response; +exports.FetchError = FetchError; + + +/***/ }), + +/***/ 139: +/***/ (function(__unusedmodule, exports) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +async function auth(token) { + const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth"; + return { + type: "token", + token: token, + tokenType + }; +} + +/** + * Prefix token for usage in the Authorization header + * + * @param token OAuth token or JSON Web Token + */ +function withAuthorizationPrefix(token) { + if (token.split(/\./).length === 3) { + return `bearer ${token}`; + } + + return `token ${token}`; +} + +async function hook(token, request, route, parameters) { + const endpoint = request.endpoint.merge(route, parameters); + endpoint.headers.authorization = withAuthorizationPrefix(token); + return request(endpoint); +} + +const createTokenAuth = function createTokenAuth(token) { + if (!token) { + throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); + } + + if (typeof token !== "string") { + throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); + } + + token = token.replace(/^(token|bearer) +/i, ""); + return Object.assign(auth.bind(null, token), { + hook: hook.bind(null, token) + }); +}; + +exports.createTokenAuth = createTokenAuth; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 152: +/***/ (function(module) { + +module.exports = deprecate + +const loggedMessages = {} + +function deprecate (message) { + if (loggedMessages[message]) { + return + } + + console.warn(`DEPRECATED (@octokit/rest): ${message}`) + loggedMessages[message] = 1 +} + + +/***/ }), + +/***/ 156: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var osName = _interopDefault(__webpack_require__(810)); + +function getUserAgent() { + try { + return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`; + } catch (error) { + if (/wmic os get Caption/.test(error.message)) { + return "Windows "; + } + + return ""; + } +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 162: +/***/ (function(module) { + +module.exports = eval("require")("encoding"); + + +/***/ }), + +/***/ 166: +/***/ (function(module, __unusedexports, __webpack_require__) { + +const { requestLog } = __webpack_require__(294); +const { + restEndpointMethods +} = __webpack_require__(360); + +const Core = __webpack_require__(438); + +const CORE_PLUGINS = [ + __webpack_require__(534), + __webpack_require__(625), // deprecated: remove in v17 + requestLog, + __webpack_require__(205), + restEndpointMethods, + __webpack_require__(610), + + __webpack_require__(658) // deprecated: remove in v17 +]; + +const OctokitRest = Core.plugin(CORE_PLUGINS); + +function DeprecatedOctokit(options) { + const warn = + options && options.log && options.log.warn + ? options.log.warn + : console.warn; + warn( + '[@octokit/rest] `const Octokit = require("@octokit/rest")` is deprecated. Use `const { Octokit } = require("@octokit/rest")` instead' + ); + return new OctokitRest(options); +} + +const Octokit = Object.assign(DeprecatedOctokit, { + Octokit: OctokitRest +}); + +Object.keys(OctokitRest).forEach(key => { + /* istanbul ignore else */ + if (OctokitRest.hasOwnProperty(key)) { + Octokit[key] = OctokitRest[key]; + } +}); + +module.exports = Octokit; + + +/***/ }), + +/***/ 173: +/***/ (function(module) { + +module.exports = validateAuth; + +function validateAuth(auth) { + if (typeof auth === "string") { + return; + } + + if (typeof auth === "function") { + return; + } + + if (auth.username && auth.password) { + return; + } + + if (auth.clientId && auth.clientSecret) { + return; + } + + throw new Error(`Invalid "auth" option: ${JSON.stringify(auth)}`); +} + + +/***/ }), + +/***/ 187: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = __webpack_require__(36); + + +/***/ }), + +/***/ 190: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + + +const path = __webpack_require__(622); +const niceTry = __webpack_require__(725); +const resolveCommand = __webpack_require__(100); +const escape = __webpack_require__(198); +const readShebang = __webpack_require__(552); +const semver = __webpack_require__(81); + +const isWin = process.platform === 'win32'; +const isExecutableRegExp = /\.(?:com|exe)$/i; +const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; + +// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0 +const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false; + +function detectShebang(parsed) { + parsed.file = resolveCommand(parsed); + + const shebang = parsed.file && readShebang(parsed.file); + + if (shebang) { + parsed.args.unshift(parsed.file); + parsed.command = shebang; + + return resolveCommand(parsed); + } + + return parsed.file; +} + +function parseNonShell(parsed) { + if (!isWin) { + return parsed; + } + + // Detect & add support for shebangs + const commandFile = detectShebang(parsed); + + // We don't need a shell if the command filename is an executable + const needsShell = !isExecutableRegExp.test(commandFile); + + // If a shell is required, use cmd.exe and take care of escaping everything correctly + // Note that `forceShell` is an hidden option used only in tests + if (parsed.options.forceShell || needsShell) { + // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` + // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument + // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, + // we need to double escape them + const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); + + // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) + // This is necessary otherwise it will always fail with ENOENT in those cases + parsed.command = path.normalize(parsed.command); + + // Escape command & arguments + parsed.command = escape.command(parsed.command); + parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); + + const shellCommand = [parsed.command].concat(parsed.args).join(' '); + + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.command = process.env.comspec || 'cmd.exe'; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } + + return parsed; +} + +function parseShell(parsed) { + // If node supports the shell option, there's no need to mimic its behavior + if (supportsShellOption) { + return parsed; + } + + // Mimic node shell option + // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335 + const shellCommand = [parsed.command].concat(parsed.args).join(' '); + + if (isWin) { + parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe'; + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } else { + if (typeof parsed.options.shell === 'string') { + parsed.command = parsed.options.shell; + } else if (process.platform === 'android') { + parsed.command = '/system/bin/sh'; + } else { + parsed.command = '/bin/sh'; + } + + parsed.args = ['-c', shellCommand]; + } + + return parsed; +} + +function parse(command, args, options) { + // Normalize arguments, similar to nodejs + if (args && !Array.isArray(args)) { + options = args; + args = null; + } + + args = args ? args.slice(0) : []; // Clone array to avoid changing the original + options = Object.assign({}, options); // Clone object to avoid changing the original + + // Build our parsed object + const parsed = { + command, + args, + options, + file: undefined, + original: { + command, + args, + }, + }; + + // Delegate further parsing to shell or non-shell + return options.shell ? parseShell(parsed) : parseNonShell(parsed); +} + +module.exports = parse; + + +/***/ }), + +/***/ 198: +/***/ (function(module) { + +"use strict"; + + +// See http://www.robvanderwoude.com/escapechars.php +const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; + +function escapeCommand(arg) { + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); + + return arg; +} + +function escapeArgument(arg, doubleEscapeMetaChars) { + // Convert to string + arg = `${arg}`; + + // Algorithm below is based on https://qntm.org/cmd + + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote + arg = arg.replace(/(\\*)"/g, '$1$1\\"'); + + // Sequence of backslashes followed by the end of the string + // (which will become a double quote later): + // double up all the backslashes + arg = arg.replace(/(\\*)$/, '$1$1'); + + // All other backslashes occur literally + + // Quote the whole thing: + arg = `"${arg}"`; + + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); + + // Double escape meta chars if necessary + if (doubleEscapeMetaChars) { + arg = arg.replace(metaCharsRegExp, '^$1'); + } + + return arg; +} + +module.exports.command = escapeCommand; +module.exports.argument = escapeArgument; + + +/***/ }), + +/***/ 205: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = paginatePlugin; + +const { paginateRest } = __webpack_require__(264); + +function paginatePlugin(octokit) { + Object.assign(octokit, paginateRest(octokit)); +} + + +/***/ }), + +/***/ 208: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +// Older verions of Node.js might not have `util.getSystemErrorName()`. +// In that case, fall back to a deprecated internal. +const util = __webpack_require__(853); + +let uv; + +if (typeof util.getSystemErrorName === 'function') { + module.exports = util.getSystemErrorName; +} else { + try { + uv = process.binding('uv'); + + if (typeof uv.errname !== 'function') { + throw new TypeError('uv.errname is not a function'); + } + } catch (err) { + console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err); + uv = null; + } + + module.exports = code => errname(uv, code); +} + +// Used for testing the fallback behavior +module.exports.__test__ = errname; + +function errname(uv, code) { + if (uv) { + return uv.errname(code); + } + + if (!(code < 0)) { + throw new Error('err >= 0'); + } + + return `Unknown system error ${code}`; +} + + + +/***/ }), + +/***/ 210: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticationRequestError; + +const { RequestError } = __webpack_require__(754); + +function authenticationRequestError(state, error, options) { + /* istanbul ignore next */ + if (!error.headers) throw error; + + const otpRequired = /required/.test(error.headers["x-github-otp"] || ""); + // handle "2FA required" error only + if (error.status !== 401 || !otpRequired) { + throw error; + } + + if ( + error.status === 401 && + otpRequired && + error.request && + error.request.headers["x-github-otp"] + ) { + throw new RequestError( + "Invalid one-time password for two-factor authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + + if (typeof state.auth.on2fa !== "function") { + throw new RequestError( + "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + + return Promise.resolve() + .then(() => { + return state.auth.on2fa(); + }) + .then(oneTimePassword => { + const newOptions = Object.assign(options, { + headers: Object.assign( + { "x-github-otp": oneTimePassword }, + options.headers + ) + }); + return state.octokit.request(newOptions); + }); +} + + +/***/ }), + +/***/ 211: +/***/ (function(module) { + +module.exports = require("https"); + +/***/ }), + +/***/ 224: +/***/ (function(module) { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); +} + +module.exports = set; + + +/***/ }), + +/***/ 242: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = getPage + +const deprecate = __webpack_require__(152) +const getPageLinks = __webpack_require__(251) +const HttpError = __webpack_require__(663) + +function getPage (octokit, link, which, headers) { + deprecate(`octokit.get${which.charAt(0).toUpperCase() + which.slice(1)}Page() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + const url = getPageLinks(link)[which] + + if (!url) { + const urlError = new HttpError(`No ${which} page found`, 404) + return Promise.reject(urlError) + } + + const requestOptions = { + url, + headers: applyAcceptHeader(link, headers) + } + + const promise = octokit.request(requestOptions) + + return promise +} + +function applyAcceptHeader (res, headers) { + const previous = res.headers && res.headers['x-github-media-type'] + + if (!previous || (headers && headers.accept)) { + return headers + } + headers = headers || {} + headers.accept = 'application/vnd.' + previous + .replace('; param=', '.') + .replace('; format=', '+') + + return headers +} + + +/***/ }), + +/***/ 251: +/***/ (function(module) { + +module.exports = getPageLinks + +function getPageLinks (link) { + link = link.link || link.headers.link || '' + + const links = {} + + // link format: + // '; rel="next", ; rel="last"' + link.replace(/<([^>]*)>;\s*rel="([\w]*)"/g, (m, uri, type) => { + links[type] = uri + }) + + return links +} + + +/***/ }), + +/***/ 253: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = isexe +isexe.sync = sync + +var fs = __webpack_require__(747) + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} + + +/***/ }), + +/***/ 264: +/***/ (function(__unusedmodule, exports) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +const VERSION = "1.1.2"; + +/** + * Some “list” response that can be paginated have a different response structure + * + * They have a `total_count` key in the response (search also has `incomplete_results`, + * /installation/repositories also has `repository_selection`), as well as a key with + * the list of the items which name varies from endpoint to endpoint: + * + * - https://developer.github.com/v3/search/#example (key `items`) + * - https://developer.github.com/v3/checks/runs/#response-3 (key: `check_runs`) + * - https://developer.github.com/v3/checks/suites/#response-1 (key: `check_suites`) + * - https://developer.github.com/v3/apps/installations/#list-repositories (key: `repositories`) + * - https://developer.github.com/v3/apps/installations/#list-installations-for-a-user (key `installations`) + * + * Octokit normalizes these responses so that paginated results are always returned following + * the same structure. One challenge is that if the list response has only one page, no Link + * header is provided, so this header alone is not sufficient to check wether a response is + * paginated or not. For the exceptions with the namespace, a fallback check for the route + * paths has to be added in order to normalize the response. We cannot check for the total_count + * property because it also exists in the response of Get the combined status for a specific ref. + */ +const REGEX = [/^\/search\//, /^\/repos\/[^/]+\/[^/]+\/commits\/[^/]+\/(check-runs|check-suites)([^/]|$)/, /^\/installation\/repositories([^/]|$)/, /^\/user\/installations([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/secrets([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/workflows(\/[^/]+\/runs)?([^/]|$)/, /^\/repos\/[^/]+\/[^/]+\/actions\/runs(\/[^/]+\/(artifacts|jobs))?([^/]|$)/]; +function normalizePaginatedListResponse(octokit, url, response) { + const path = url.replace(octokit.request.endpoint.DEFAULTS.baseUrl, ""); + const responseNeedsNormalization = REGEX.find(regex => regex.test(path)); + if (!responseNeedsNormalization) return; // keep the additional properties intact as there is currently no other way + // to retrieve the same information. + + const incompleteResults = response.data.incomplete_results; + const repositorySelection = response.data.repository_selection; + const totalCount = response.data.total_count; + delete response.data.incomplete_results; + delete response.data.repository_selection; + delete response.data.total_count; + const namespaceKey = Object.keys(response.data)[0]; + const data = response.data[namespaceKey]; + response.data = data; + + if (typeof incompleteResults !== "undefined") { + response.data.incomplete_results = incompleteResults; + } + + if (typeof repositorySelection !== "undefined") { + response.data.repository_selection = repositorySelection; + } + + response.data.total_count = totalCount; + Object.defineProperty(response.data, namespaceKey, { + get() { + octokit.log.warn(`[@octokit/paginate-rest] "response.data.${namespaceKey}" is deprecated for "GET ${path}". Get the results directly from "response.data"`); + return Array.from(data); + } + + }); +} + +function iterator(octokit, route, parameters) { + const options = octokit.request.endpoint(route, parameters); + const method = options.method; + const headers = options.headers; + let url = options.url; + return { + [Symbol.asyncIterator]: () => ({ + next() { + if (!url) { + return Promise.resolve({ + done: true + }); + } + + return octokit.request({ + method, + url, + headers + }).then(response => { + normalizePaginatedListResponse(octokit, url, response); // `response.headers.link` format: + // '; rel="next", ; rel="last"' + // sets `url` to undefined if "next" URL is not present or `link` header is not set + + url = ((response.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; + return { + value: response + }; + }); + } + + }) + }; +} + +function paginate(octokit, route, parameters, mapFn) { + if (typeof parameters === "function") { + mapFn = parameters; + parameters = undefined; + } + + return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); +} + +function gather(octokit, results, iterator, mapFn) { + return iterator.next().then(result => { + if (result.done) { + return results; + } + + let earlyExit = false; + + function done() { + earlyExit = true; + } + + results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); + + if (earlyExit) { + return results; + } + + return gather(octokit, results, iterator, mapFn); + }); +} + +/** + * @param octokit Octokit instance + * @param options Options passed to Octokit constructor + */ + +function paginateRest(octokit) { + return { + paginate: Object.assign(paginate.bind(null, octokit), { + iterator: iterator.bind(null, octokit) + }) + }; +} +paginateRest.VERSION = VERSION; + +exports.paginateRest = paginateRest; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 266: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = isexe +isexe.sync = sync + +var fs = __webpack_require__(747) + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} + + +/***/ }), + +/***/ 275: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = Octokit; + +const { request } = __webpack_require__(979); +const Hook = __webpack_require__(627); + +const parseClientOptions = __webpack_require__(942); + +function Octokit(plugins, options) { + options = options || {}; + const hook = new Hook.Collection(); + const log = Object.assign( + { + debug: () => {}, + info: () => {}, + warn: console.warn, + error: console.error + }, + options && options.log + ); + const api = { + hook, + log, + request: request.defaults(parseClientOptions(options, log, hook)) + }; + + plugins.forEach(pluginFunction => pluginFunction(api, options)); + + return api; +} + + +/***/ }), + +/***/ 290: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const os = __webpack_require__(87); + +const nameMap = new Map([ + [19, 'Catalina'], + [18, 'Mojave'], + [17, 'High Sierra'], + [16, 'Sierra'], + [15, 'El Capitan'], + [14, 'Yosemite'], + [13, 'Mavericks'], + [12, 'Mountain Lion'], + [11, 'Lion'], + [10, 'Snow Leopard'], + [9, 'Leopard'], + [8, 'Tiger'], + [7, 'Panther'], + [6, 'Jaguar'], + [5, 'Puma'] +]); + +const macosRelease = release => { + release = Number((release || os.release()).split('.')[0]); + return { + name: nameMap.get(release), + version: '10.' + (release - 4) + }; +}; + +module.exports = macosRelease; +// TODO: remove this in the next major version +module.exports.default = macosRelease; + + +/***/ }), + +/***/ 294: +/***/ (function(__unusedmodule, exports) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +const VERSION = "1.0.0"; + +/** + * @param octokit Octokit instance + * @param options Options passed to Octokit constructor + */ + +function requestLog(octokit) { + octokit.hook.wrap("request", (request, options) => { + octokit.log.debug("request", options); + const start = Date.now(); + const requestOptions = octokit.request.endpoint.parse(options); + const path = requestOptions.url.replace(options.baseUrl, ""); + return request(options).then(response => { + octokit.log.info(`${requestOptions.method} ${path} - ${response.status} in ${Date.now() - start}ms`); + return response; + }).catch(error => { + octokit.log.info(`${requestOptions.method} ${path} - ${error.status} in ${Date.now() - start}ms`); + throw error; + }); + }); +} +requestLog.VERSION = VERSION; + +exports.requestLog = requestLog; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 322: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = which +which.sync = whichSync + +var isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +var path = __webpack_require__(622) +var COLON = isWindows ? ';' : ':' +var isexe = __webpack_require__(413) + +function getNotFoundError (cmd) { + var er = new Error('not found: ' + cmd) + er.code = 'ENOENT' + + return er +} + +function getPathInfo (cmd, opt) { + var colon = opt.colon || COLON + var pathEnv = opt.path || process.env.PATH || '' + var pathExt = [''] + + pathEnv = pathEnv.split(colon) + + var pathExtExe = '' + if (isWindows) { + pathEnv.unshift(process.cwd()) + pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM') + pathExt = pathExtExe.split(colon) + + + // Always test the cmd itself first. isexe will check to make sure + // it's found in the pathExt set. + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + if (cmd.match(/\//) || isWindows && cmd.match(/\\/)) + pathEnv = [''] + + return { + env: pathEnv, + ext: pathExt, + extExe: pathExtExe + } +} + +function which (cmd, opt, cb) { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + + var info = getPathInfo(cmd, opt) + var pathEnv = info.env + var pathExt = info.ext + var pathExtExe = info.extExe + var found = [] + + ;(function F (i, l) { + if (i === l) { + if (opt.all && found.length) + return cb(null, found) + else + return cb(getNotFoundError(cmd)) + } + + var pathPart = pathEnv[i] + if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"') + pathPart = pathPart.slice(1, -1) + + var p = path.join(pathPart, cmd) + if (!pathPart && (/^\.[\\\/]/).test(cmd)) { + p = cmd.slice(0, 2) + p + } + ;(function E (ii, ll) { + if (ii === ll) return F(i + 1, l) + var ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, function (er, is) { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return cb(null, p + ext) + } + return E(ii + 1, ll) + }) + })(0, pathExt.length) + })(0, pathEnv.length) +} + +function whichSync (cmd, opt) { + opt = opt || {} + + var info = getPathInfo(cmd, opt) + var pathEnv = info.env + var pathExt = info.ext + var pathExtExe = info.extExe + var found = [] + + for (var i = 0, l = pathEnv.length; i < l; i ++) { + var pathPart = pathEnv[i] + if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"') + pathPart = pathPart.slice(1, -1) + + var p = path.join(pathPart, cmd) + if (!pathPart && /^\.[\\\/]/.test(cmd)) { + p = cmd.slice(0, 2) + p + } + for (var j = 0, ll = pathExt.length; j < ll; j ++) { + var cur = p + pathExt[j] + var is + try { + is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} + + +/***/ }), + +/***/ 333: +/***/ (function(module) { + +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} + + +/***/ }), + +/***/ 336: +/***/ (function(__unusedmodule, exports) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +class Deprecation extends Error { + constructor(message) { + super(message); // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + + this.name = 'Deprecation'; + } + +} + +exports.Deprecation = Deprecation; + + +/***/ }), + +/***/ 343: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticationRequestError; + +const { RequestError } = __webpack_require__(754); + +function authenticationRequestError(state, error, options) { + if (!error.headers) throw error; + + const otpRequired = /required/.test(error.headers["x-github-otp"] || ""); + // handle "2FA required" error only + if (error.status !== 401 || !otpRequired) { + throw error; + } + + if ( + error.status === 401 && + otpRequired && + error.request && + error.request.headers["x-github-otp"] + ) { + if (state.otp) { + delete state.otp; // no longer valid, request again + } else { + throw new RequestError( + "Invalid one-time password for two-factor authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + } + + if (typeof state.auth.on2fa !== "function") { + throw new RequestError( + "2FA required, but options.on2fa is not a function. See https://github.com/octokit/rest.js#authentication", + 401, + { + headers: error.headers, + request: options + } + ); + } + + return Promise.resolve() + .then(() => { + return state.auth.on2fa(); + }) + .then(oneTimePassword => { + const newOptions = Object.assign(options, { + headers: Object.assign(options.headers, { + "x-github-otp": oneTimePassword + }) + }); + return state.octokit.request(newOptions).then(response => { + // If OTP still valid, then persist it for following requests + state.otp = oneTimePassword; + return response; + }); + }); +} + + +/***/ }), + +/***/ 354: +/***/ (function(module, __unusedexports, __webpack_require__) { + +var once = __webpack_require__(678) +var eos = __webpack_require__(718) +var fs = __webpack_require__(747) // we only need fs to get the ReadStream and WriteStream prototypes + +var noop = function () {} +var ancient = /^v?\.0/.test(process.version) + +var isFn = function (fn) { + return typeof fn === 'function' +} + +var isFS = function (stream) { + if (!ancient) return false // newer node version do not need to care about fs is a special way + if (!fs) return false // browser + return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) +} + +var isRequest = function (stream) { + return stream.setHeader && isFn(stream.abort) +} + +var destroyer = function (stream, reading, writing, callback) { + callback = once(callback) + + var closed = false + stream.on('close', function () { + closed = true + }) + + eos(stream, {readable: reading, writable: writing}, function (err) { + if (err) return callback(err) + closed = true + callback() + }) + + var destroyed = false + return function (err) { + if (closed) return + if (destroyed) return + destroyed = true + + if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks + if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want + + if (isFn(stream.destroy)) return stream.destroy() + + callback(err || new Error('stream was destroyed')) + } +} + +var call = function (fn) { + fn() +} + +var pipe = function (from, to) { + return from.pipe(to) +} + +var pump = function () { + var streams = Array.prototype.slice.call(arguments) + var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop + + if (Array.isArray(streams[0])) streams = streams[0] + if (streams.length < 2) throw new Error('pump requires two streams per minimum') + + var error + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1 + var writing = i > 0 + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err + if (err) destroys.forEach(call) + if (reading) return + destroys.forEach(call) + callback(error) + }) + }) + + return streams.reduce(pipe) +} + +module.exports = pump + + +/***/ }), + +/***/ 357: +/***/ (function(module) { + +module.exports = require("assert"); + +/***/ }), + +/***/ 360: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +var deprecation = __webpack_require__(336); + +var endpointsByScope = { + actions: { + cancelWorkflowRun: { + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runs/:run_id/cancel" + }, + createOrUpdateSecretForRepo: { + method: "PUT", + params: { + encrypted_value: { + type: "string" + }, + key_id: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/secrets/:name" + }, + createRegistrationToken: { + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/runners/registration-token" + }, + createRemoveToken: { + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/runners/remove-token" + }, + deleteArtifact: { + method: "DELETE", + params: { + artifact_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/artifacts/:artifact_id" + }, + deleteSecretFromRepo: { + method: "DELETE", + params: { + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/secrets/:name" + }, + downloadArtifact: { + method: "GET", + params: { + archive_format: { + required: true, + type: "string" + }, + artifact_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/artifacts/:artifact_id/:archive_format" + }, + getArtifact: { + method: "GET", + params: { + artifact_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/artifacts/:artifact_id" + }, + getPublicKey: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/secrets/public-key" + }, + getSecret: { + method: "GET", + params: { + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/secrets/:name" + }, + getSelfHostedRunner: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + runner_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runners/:runner_id" + }, + getWorkflow: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + workflow_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/workflows/:workflow_id" + }, + getWorkflowJob: { + method: "GET", + params: { + job_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/jobs/:job_id" + }, + getWorkflowRun: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runs/:run_id" + }, + listDownloadsForSelfHostedRunnerApplication: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/runners/downloads" + }, + listJobsForWorkflowRun: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runs/:run_id/jobs" + }, + listRepoWorkflowRuns: { + method: "GET", + params: { + actor: { + type: "string" + }, + branch: { + type: "string" + }, + event: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + status: { + enum: ["completed", "status", "conclusion"], + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/runs" + }, + listRepoWorkflows: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/workflows" + }, + listSecretsForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/secrets" + }, + listSelfHostedRunnersForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/runners" + }, + listWorkflowJobLogs: { + method: "GET", + params: { + job_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/actions/jobs/:job_id/logs" + }, + listWorkflowRunArtifacts: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runs/:run_id/artifacts" + }, + listWorkflowRunLogs: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runs/:run_id/logs" + }, + listWorkflowRuns: { + method: "GET", + params: { + actor: { + type: "string" + }, + branch: { + type: "string" + }, + event: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + status: { + enum: ["completed", "status", "conclusion"], + type: "string" + }, + workflow_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/workflows/:workflow_id/runs" + }, + reRunWorkflow: { + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + run_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runs/:run_id/rerun" + }, + removeSelfHostedRunner: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + runner_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/actions/runners/:runner_id" + } + }, + activity: { + checkStarringRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/user/starred/:owner/:repo" + }, + deleteRepoSubscription: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/subscription" + }, + deleteThreadSubscription: { + method: "DELETE", + params: { + thread_id: { + required: true, + type: "integer" + } + }, + url: "/notifications/threads/:thread_id/subscription" + }, + getRepoSubscription: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/subscription" + }, + getThread: { + method: "GET", + params: { + thread_id: { + required: true, + type: "integer" + } + }, + url: "/notifications/threads/:thread_id" + }, + getThreadSubscription: { + method: "GET", + params: { + thread_id: { + required: true, + type: "integer" + } + }, + url: "/notifications/threads/:thread_id/subscription" + }, + listEventsForOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/events/orgs/:org" + }, + listEventsForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/events" + }, + listFeeds: { + method: "GET", + params: {}, + url: "/feeds" + }, + listNotifications: { + method: "GET", + params: { + all: { + type: "boolean" + }, + before: { + type: "string" + }, + page: { + type: "integer" + }, + participating: { + type: "boolean" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + } + }, + url: "/notifications" + }, + listNotificationsForRepo: { + method: "GET", + params: { + all: { + type: "boolean" + }, + before: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + participating: { + type: "boolean" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + } + }, + url: "/repos/:owner/:repo/notifications" + }, + listPublicEvents: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/events" + }, + listPublicEventsForOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/events" + }, + listPublicEventsForRepoNetwork: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/networks/:owner/:repo/events" + }, + listPublicEventsForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/events/public" + }, + listReceivedEventsForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/received_events" + }, + listReceivedPublicEventsForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/received_events/public" + }, + listRepoEvents: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/events" + }, + listReposStarredByAuthenticatedUser: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/user/starred" + }, + listReposStarredByUser: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/starred" + }, + listReposWatchedByUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/subscriptions" + }, + listStargazersForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/stargazers" + }, + listWatchedReposForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/subscriptions" + }, + listWatchersForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/subscribers" + }, + markAsRead: { + method: "PUT", + params: { + last_read_at: { + type: "string" + } + }, + url: "/notifications" + }, + markNotificationsAsReadForRepo: { + method: "PUT", + params: { + last_read_at: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/notifications" + }, + markThreadAsRead: { + method: "PATCH", + params: { + thread_id: { + required: true, + type: "integer" + } + }, + url: "/notifications/threads/:thread_id" + }, + setRepoSubscription: { + method: "PUT", + params: { + ignored: { + type: "boolean" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + subscribed: { + type: "boolean" + } + }, + url: "/repos/:owner/:repo/subscription" + }, + setThreadSubscription: { + method: "PUT", + params: { + ignored: { + type: "boolean" + }, + thread_id: { + required: true, + type: "integer" + } + }, + url: "/notifications/threads/:thread_id/subscription" + }, + starRepo: { + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/user/starred/:owner/:repo" + }, + unstarRepo: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/user/starred/:owner/:repo" + } + }, + apps: { + addRepoToInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "PUT", + params: { + installation_id: { + required: true, + type: "integer" + }, + repository_id: { + required: true, + type: "integer" + } + }, + url: "/user/installations/:installation_id/repositories/:repository_id" + }, + checkAccountIsAssociatedWithAny: { + method: "GET", + params: { + account_id: { + required: true, + type: "integer" + } + }, + url: "/marketplace_listing/accounts/:account_id" + }, + checkAccountIsAssociatedWithAnyStubbed: { + method: "GET", + params: { + account_id: { + required: true, + type: "integer" + } + }, + url: "/marketplace_listing/stubbed/accounts/:account_id" + }, + checkAuthorization: { + deprecated: "octokit.apps.checkAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#check-an-authorization", + method: "GET", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + checkToken: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "POST", + params: { + access_token: { + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/token" + }, + createContentAttachment: { + headers: { + accept: "application/vnd.github.corsair-preview+json" + }, + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + content_reference_id: { + required: true, + type: "integer" + }, + title: { + required: true, + type: "string" + } + }, + url: "/content_references/:content_reference_id/attachments" + }, + createFromManifest: { + headers: { + accept: "application/vnd.github.fury-preview+json" + }, + method: "POST", + params: { + code: { + required: true, + type: "string" + } + }, + url: "/app-manifests/:code/conversions" + }, + createInstallationToken: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "POST", + params: { + installation_id: { + required: true, + type: "integer" + }, + permissions: { + type: "object" + }, + repository_ids: { + type: "integer[]" + } + }, + url: "/app/installations/:installation_id/access_tokens" + }, + deleteAuthorization: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "DELETE", + params: { + access_token: { + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/grant" + }, + deleteInstallation: { + headers: { + accept: "application/vnd.github.gambit-preview+json,application/vnd.github.machine-man-preview+json" + }, + method: "DELETE", + params: { + installation_id: { + required: true, + type: "integer" + } + }, + url: "/app/installations/:installation_id" + }, + deleteToken: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "DELETE", + params: { + access_token: { + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/token" + }, + findOrgInstallation: { + deprecated: "octokit.apps.findOrgInstallation() has been renamed to octokit.apps.getOrgInstallation() (2019-04-10)", + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/installation" + }, + findRepoInstallation: { + deprecated: "octokit.apps.findRepoInstallation() has been renamed to octokit.apps.getRepoInstallation() (2019-04-10)", + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/installation" + }, + findUserInstallation: { + deprecated: "octokit.apps.findUserInstallation() has been renamed to octokit.apps.getUserInstallation() (2019-04-10)", + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/installation" + }, + getAuthenticated: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: {}, + url: "/app" + }, + getBySlug: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + app_slug: { + required: true, + type: "string" + } + }, + url: "/apps/:app_slug" + }, + getInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + installation_id: { + required: true, + type: "integer" + } + }, + url: "/app/installations/:installation_id" + }, + getOrgInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/installation" + }, + getRepoInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/installation" + }, + getUserInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/installation" + }, + listAccountsUserOrOrgOnPlan: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + plan_id: { + required: true, + type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/marketplace_listing/plans/:plan_id/accounts" + }, + listAccountsUserOrOrgOnPlanStubbed: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + plan_id: { + required: true, + type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/marketplace_listing/stubbed/plans/:plan_id/accounts" + }, + listInstallationReposForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + installation_id: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/installations/:installation_id/repositories" + }, + listInstallations: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/app/installations" + }, + listInstallationsForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/installations" + }, + listMarketplacePurchasesForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/marketplace_purchases" + }, + listMarketplacePurchasesForAuthenticatedUserStubbed: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/marketplace_purchases/stubbed" + }, + listPlans: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/marketplace_listing/plans" + }, + listPlansStubbed: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/marketplace_listing/stubbed/plans" + }, + listRepos: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/installation/repositories" + }, + removeRepoFromInstallation: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "DELETE", + params: { + installation_id: { + required: true, + type: "integer" + }, + repository_id: { + required: true, + type: "integer" + } + }, + url: "/user/installations/:installation_id/repositories/:repository_id" + }, + resetAuthorization: { + deprecated: "octokit.apps.resetAuthorization() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#reset-an-authorization", + method: "POST", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + resetToken: { + headers: { + accept: "application/vnd.github.doctor-strange-preview+json" + }, + method: "PATCH", + params: { + access_token: { + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/token" + }, + revokeAuthorizationForApplication: { + deprecated: "octokit.apps.revokeAuthorizationForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-an-authorization-for-an-application", + method: "DELETE", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + revokeGrantForApplication: { + deprecated: "octokit.apps.revokeGrantForApplication() is deprecated, see https://developer.github.com/v3/apps/oauth_applications/#revoke-a-grant-for-an-application", + method: "DELETE", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/grants/:access_token" + }, + revokeInstallationToken: { + headers: { + accept: "application/vnd.github.gambit-preview+json" + }, + method: "DELETE", + params: {}, + url: "/installation/token" + } + }, + checks: { + create: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "POST", + params: { + actions: { + type: "object[]" + }, + "actions[].description": { + required: true, + type: "string" + }, + "actions[].identifier": { + required: true, + type: "string" + }, + "actions[].label": { + required: true, + type: "string" + }, + completed_at: { + type: "string" + }, + conclusion: { + enum: ["success", "failure", "neutral", "cancelled", "timed_out", "action_required"], + type: "string" + }, + details_url: { + type: "string" + }, + external_id: { + type: "string" + }, + head_sha: { + required: true, + type: "string" + }, + name: { + required: true, + type: "string" + }, + output: { + type: "object" + }, + "output.annotations": { + type: "object[]" + }, + "output.annotations[].annotation_level": { + enum: ["notice", "warning", "failure"], + required: true, + type: "string" + }, + "output.annotations[].end_column": { + type: "integer" + }, + "output.annotations[].end_line": { + required: true, + type: "integer" + }, + "output.annotations[].message": { + required: true, + type: "string" + }, + "output.annotations[].path": { + required: true, + type: "string" + }, + "output.annotations[].raw_details": { + type: "string" + }, + "output.annotations[].start_column": { + type: "integer" + }, + "output.annotations[].start_line": { + required: true, + type: "integer" + }, + "output.annotations[].title": { + type: "string" + }, + "output.images": { + type: "object[]" + }, + "output.images[].alt": { + required: true, + type: "string" + }, + "output.images[].caption": { + type: "string" + }, + "output.images[].image_url": { + required: true, + type: "string" + }, + "output.summary": { + required: true, + type: "string" + }, + "output.text": { + type: "string" + }, + "output.title": { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + started_at: { + type: "string" + }, + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" + } + }, + url: "/repos/:owner/:repo/check-runs" + }, + createSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "POST", + params: { + head_sha: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites" + }, + get: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + check_run_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/check-runs/:check_run_id" + }, + getSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + check_suite_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites/:check_suite_id" + }, + listAnnotations: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + check_run_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/check-runs/:check_run_id/annotations" + }, + listForRef: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + check_name: { + type: "string" + }, + filter: { + enum: ["latest", "all"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:ref/check-runs" + }, + listForSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + check_name: { + type: "string" + }, + check_suite_id: { + required: true, + type: "integer" + }, + filter: { + enum: ["latest", "all"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites/:check_suite_id/check-runs" + }, + listSuitesForRef: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "GET", + params: { + app_id: { + type: "integer" + }, + check_name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:ref/check-suites" + }, + rerequestSuite: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "POST", + params: { + check_suite_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites/:check_suite_id/rerequest" + }, + setSuitesPreferences: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "PATCH", + params: { + auto_trigger_checks: { + type: "object[]" + }, + "auto_trigger_checks[].app_id": { + required: true, + type: "integer" + }, + "auto_trigger_checks[].setting": { + required: true, + type: "boolean" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/check-suites/preferences" + }, + update: { + headers: { + accept: "application/vnd.github.antiope-preview+json" + }, + method: "PATCH", + params: { + actions: { + type: "object[]" + }, + "actions[].description": { + required: true, + type: "string" + }, + "actions[].identifier": { + required: true, + type: "string" + }, + "actions[].label": { + required: true, + type: "string" + }, + check_run_id: { + required: true, + type: "integer" + }, + completed_at: { + type: "string" + }, + conclusion: { + enum: ["success", "failure", "neutral", "cancelled", "timed_out", "action_required"], + type: "string" + }, + details_url: { + type: "string" + }, + external_id: { + type: "string" + }, + name: { + type: "string" + }, + output: { + type: "object" + }, + "output.annotations": { + type: "object[]" + }, + "output.annotations[].annotation_level": { + enum: ["notice", "warning", "failure"], + required: true, + type: "string" + }, + "output.annotations[].end_column": { + type: "integer" + }, + "output.annotations[].end_line": { + required: true, + type: "integer" + }, + "output.annotations[].message": { + required: true, + type: "string" + }, + "output.annotations[].path": { + required: true, + type: "string" + }, + "output.annotations[].raw_details": { + type: "string" + }, + "output.annotations[].start_column": { + type: "integer" + }, + "output.annotations[].start_line": { + required: true, + type: "integer" + }, + "output.annotations[].title": { + type: "string" + }, + "output.images": { + type: "object[]" + }, + "output.images[].alt": { + required: true, + type: "string" + }, + "output.images[].caption": { + type: "string" + }, + "output.images[].image_url": { + required: true, + type: "string" + }, + "output.summary": { + required: true, + type: "string" + }, + "output.text": { + type: "string" + }, + "output.title": { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + started_at: { + type: "string" + }, + status: { + enum: ["queued", "in_progress", "completed"], + type: "string" + } + }, + url: "/repos/:owner/:repo/check-runs/:check_run_id" + } + }, + codesOfConduct: { + getConductCode: { + headers: { + accept: "application/vnd.github.scarlet-witch-preview+json" + }, + method: "GET", + params: { + key: { + required: true, + type: "string" + } + }, + url: "/codes_of_conduct/:key" + }, + getForRepo: { + headers: { + accept: "application/vnd.github.scarlet-witch-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/community/code_of_conduct" + }, + listConductCodes: { + headers: { + accept: "application/vnd.github.scarlet-witch-preview+json" + }, + method: "GET", + params: {}, + url: "/codes_of_conduct" + } + }, + emojis: { + get: { + method: "GET", + params: {}, + url: "/emojis" + } + }, + gists: { + checkIsStarred: { + method: "GET", + params: { + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/star" + }, + create: { + method: "POST", + params: { + description: { + type: "string" + }, + files: { + required: true, + type: "object" + }, + "files.content": { + type: "string" + }, + public: { + type: "boolean" + } + }, + url: "/gists" + }, + createComment: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/comments" + }, + delete: { + method: "DELETE", + params: { + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id" + }, + deleteComment: { + method: "DELETE", + params: { + comment_id: { + required: true, + type: "integer" + }, + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/comments/:comment_id" + }, + fork: { + method: "POST", + params: { + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/forks" + }, + get: { + method: "GET", + params: { + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id" + }, + getComment: { + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/comments/:comment_id" + }, + getRevision: { + method: "GET", + params: { + gist_id: { + required: true, + type: "string" + }, + sha: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/:sha" + }, + list: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + } + }, + url: "/gists" + }, + listComments: { + method: "GET", + params: { + gist_id: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/gists/:gist_id/comments" + }, + listCommits: { + method: "GET", + params: { + gist_id: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/gists/:gist_id/commits" + }, + listForks: { + method: "GET", + params: { + gist_id: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/gists/:gist_id/forks" + }, + listPublic: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + } + }, + url: "/gists/public" + }, + listPublicForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/gists" + }, + listStarred: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + } + }, + url: "/gists/starred" + }, + star: { + method: "PUT", + params: { + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/star" + }, + unstar: { + method: "DELETE", + params: { + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/star" + }, + update: { + method: "PATCH", + params: { + description: { + type: "string" + }, + files: { + type: "object" + }, + "files.content": { + type: "string" + }, + "files.filename": { + type: "string" + }, + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id" + }, + updateComment: { + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_id: { + required: true, + type: "integer" + }, + gist_id: { + required: true, + type: "string" + } + }, + url: "/gists/:gist_id/comments/:comment_id" + } + }, + git: { + createBlob: { + method: "POST", + params: { + content: { + required: true, + type: "string" + }, + encoding: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/blobs" + }, + createCommit: { + method: "POST", + params: { + author: { + type: "object" + }, + "author.date": { + type: "string" + }, + "author.email": { + type: "string" + }, + "author.name": { + type: "string" + }, + committer: { + type: "object" + }, + "committer.date": { + type: "string" + }, + "committer.email": { + type: "string" + }, + "committer.name": { + type: "string" + }, + message: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + parents: { + required: true, + type: "string[]" + }, + repo: { + required: true, + type: "string" + }, + signature: { + type: "string" + }, + tree: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/commits" + }, + createRef: { + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/refs" + }, + createTag: { + method: "POST", + params: { + message: { + required: true, + type: "string" + }, + object: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + tag: { + required: true, + type: "string" + }, + tagger: { + type: "object" + }, + "tagger.date": { + type: "string" + }, + "tagger.email": { + type: "string" + }, + "tagger.name": { + type: "string" + }, + type: { + enum: ["commit", "tree", "blob"], + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/tags" + }, + createTree: { + method: "POST", + params: { + base_tree: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + tree: { + required: true, + type: "object[]" + }, + "tree[].content": { + type: "string" + }, + "tree[].mode": { + enum: ["100644", "100755", "040000", "160000", "120000"], + type: "string" + }, + "tree[].path": { + type: "string" + }, + "tree[].sha": { + allowNull: true, + type: "string" + }, + "tree[].type": { + enum: ["blob", "tree", "commit"], + type: "string" + } + }, + url: "/repos/:owner/:repo/git/trees" + }, + deleteRef: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/refs/:ref" + }, + getBlob: { + method: "GET", + params: { + file_sha: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/blobs/:file_sha" + }, + getCommit: { + method: "GET", + params: { + commit_sha: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/commits/:commit_sha" + }, + getRef: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/ref/:ref" + }, + getTag: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + tag_sha: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/tags/:tag_sha" + }, + getTree: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + recursive: { + enum: ["1"], + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + tree_sha: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/trees/:tree_sha" + }, + listMatchingRefs: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/matching-refs/:ref" + }, + listRefs: { + method: "GET", + params: { + namespace: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/refs/:namespace" + }, + updateRef: { + method: "PATCH", + params: { + force: { + type: "boolean" + }, + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/git/refs/:ref" + } + }, + gitignore: { + getTemplate: { + method: "GET", + params: { + name: { + required: true, + type: "string" + } + }, + url: "/gitignore/templates/:name" + }, + listTemplates: { + method: "GET", + params: {}, + url: "/gitignore/templates" + } + }, + interactions: { + addOrUpdateRestrictionsForOrg: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "PUT", + params: { + limit: { + enum: ["existing_users", "contributors_only", "collaborators_only"], + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/interaction-limits" + }, + addOrUpdateRestrictionsForRepo: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "PUT", + params: { + limit: { + enum: ["existing_users", "contributors_only", "collaborators_only"], + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/interaction-limits" + }, + getRestrictionsForOrg: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/interaction-limits" + }, + getRestrictionsForRepo: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/interaction-limits" + }, + removeRestrictionsForOrg: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "DELETE", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/interaction-limits" + }, + removeRestrictionsForRepo: { + headers: { + accept: "application/vnd.github.sombra-preview+json" + }, + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/interaction-limits" + } + }, + issues: { + addAssignees: { + method: "POST", + params: { + assignees: { + type: "string[]" + }, + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/assignees" + }, + addLabels: { + method: "POST", + params: { + issue_number: { + required: true, + type: "integer" + }, + labels: { + required: true, + type: "string[]" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/labels" + }, + checkAssignee: { + method: "GET", + params: { + assignee: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/assignees/:assignee" + }, + create: { + method: "POST", + params: { + assignee: { + type: "string" + }, + assignees: { + type: "string[]" + }, + body: { + type: "string" + }, + labels: { + type: "string[]" + }, + milestone: { + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + title: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues" + }, + createComment: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/comments" + }, + createLabel: { + method: "POST", + params: { + color: { + required: true, + type: "string" + }, + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/labels" + }, + createMilestone: { + method: "POST", + params: { + description: { + type: "string" + }, + due_on: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + state: { + enum: ["open", "closed"], + type: "string" + }, + title: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/milestones" + }, + deleteComment: { + method: "DELETE", + params: { + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/comments/:comment_id" + }, + deleteLabel: { + method: "DELETE", + params: { + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/labels/:name" + }, + deleteMilestone: { + method: "DELETE", + params: { + milestone_number: { + required: true, + type: "integer" + }, + number: { + alias: "milestone_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/milestones/:milestone_number" + }, + get: { + method: "GET", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number" + }, + getComment: { + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/comments/:comment_id" + }, + getEvent: { + method: "GET", + params: { + event_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/events/:event_id" + }, + getLabel: { + method: "GET", + params: { + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/labels/:name" + }, + getMilestone: { + method: "GET", + params: { + milestone_number: { + required: true, + type: "integer" + }, + number: { + alias: "milestone_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/milestones/:milestone_number" + }, + list: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + filter: { + enum: ["assigned", "created", "mentioned", "subscribed", "all"], + type: "string" + }, + labels: { + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/issues" + }, + listAssignees: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/assignees" + }, + listComments: { + method: "GET", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/comments" + }, + listCommentsForRepo: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/comments" + }, + listEvents: { + method: "GET", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/events" + }, + listEventsForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/events" + }, + listEventsForTimeline: { + headers: { + accept: "application/vnd.github.mockingbird-preview+json" + }, + method: "GET", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/timeline" + }, + listForAuthenticatedUser: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + filter: { + enum: ["assigned", "created", "mentioned", "subscribed", "all"], + type: "string" + }, + labels: { + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/user/issues" + }, + listForOrg: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + filter: { + enum: ["assigned", "created", "mentioned", "subscribed", "all"], + type: "string" + }, + labels: { + type: "string" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/orgs/:org/issues" + }, + listForRepo: { + method: "GET", + params: { + assignee: { + type: "string" + }, + creator: { + type: "string" + }, + direction: { + enum: ["asc", "desc"], + type: "string" + }, + labels: { + type: "string" + }, + mentioned: { + type: "string" + }, + milestone: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated", "comments"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/repos/:owner/:repo/issues" + }, + listLabelsForMilestone: { + method: "GET", + params: { + milestone_number: { + required: true, + type: "integer" + }, + number: { + alias: "milestone_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/milestones/:milestone_number/labels" + }, + listLabelsForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/labels" + }, + listLabelsOnIssue: { + method: "GET", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/labels" + }, + listMilestonesForRepo: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + sort: { + enum: ["due_on", "completeness"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/repos/:owner/:repo/milestones" + }, + lock: { + method: "PUT", + params: { + issue_number: { + required: true, + type: "integer" + }, + lock_reason: { + enum: ["off-topic", "too heated", "resolved", "spam"], + type: "string" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/lock" + }, + removeAssignees: { + method: "DELETE", + params: { + assignees: { + type: "string[]" + }, + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/assignees" + }, + removeLabel: { + method: "DELETE", + params: { + issue_number: { + required: true, + type: "integer" + }, + name: { + required: true, + type: "string" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/labels/:name" + }, + removeLabels: { + method: "DELETE", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/labels" + }, + replaceLabels: { + method: "PUT", + params: { + issue_number: { + required: true, + type: "integer" + }, + labels: { + type: "string[]" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/labels" + }, + unlock: { + method: "DELETE", + params: { + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/lock" + }, + update: { + method: "PATCH", + params: { + assignee: { + type: "string" + }, + assignees: { + type: "string[]" + }, + body: { + type: "string" + }, + issue_number: { + required: true, + type: "integer" + }, + labels: { + type: "string[]" + }, + milestone: { + allowNull: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + state: { + enum: ["open", "closed"], + type: "string" + }, + title: { + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number" + }, + updateComment: { + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/comments/:comment_id" + }, + updateLabel: { + method: "PATCH", + params: { + color: { + type: "string" + }, + current_name: { + required: true, + type: "string" + }, + description: { + type: "string" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/labels/:current_name" + }, + updateMilestone: { + method: "PATCH", + params: { + description: { + type: "string" + }, + due_on: { + type: "string" + }, + milestone_number: { + required: true, + type: "integer" + }, + number: { + alias: "milestone_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + state: { + enum: ["open", "closed"], + type: "string" + }, + title: { + type: "string" + } + }, + url: "/repos/:owner/:repo/milestones/:milestone_number" + } + }, + licenses: { + get: { + method: "GET", + params: { + license: { + required: true, + type: "string" + } + }, + url: "/licenses/:license" + }, + getForRepo: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/license" + }, + list: { + deprecated: "octokit.licenses.list() has been renamed to octokit.licenses.listCommonlyUsed() (2019-03-05)", + method: "GET", + params: {}, + url: "/licenses" + }, + listCommonlyUsed: { + method: "GET", + params: {}, + url: "/licenses" + } + }, + markdown: { + render: { + method: "POST", + params: { + context: { + type: "string" + }, + mode: { + enum: ["markdown", "gfm"], + type: "string" + }, + text: { + required: true, + type: "string" + } + }, + url: "/markdown" + }, + renderRaw: { + headers: { + "content-type": "text/plain; charset=utf-8" + }, + method: "POST", + params: { + data: { + mapTo: "data", + required: true, + type: "string" + } + }, + url: "/markdown/raw" + } + }, + meta: { + get: { + method: "GET", + params: {}, + url: "/meta" + } + }, + migrations: { + cancelImport: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/import" + }, + deleteArchiveForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "DELETE", + params: { + migration_id: { + required: true, + type: "integer" + } + }, + url: "/user/migrations/:migration_id/archive" + }, + deleteArchiveForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "DELETE", + params: { + migration_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/migrations/:migration_id/archive" + }, + downloadArchiveForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/migrations/:migration_id/archive" + }, + getArchiveForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + } + }, + url: "/user/migrations/:migration_id/archive" + }, + getArchiveForOrg: { + deprecated: "octokit.migrations.getArchiveForOrg() has been renamed to octokit.migrations.downloadArchiveForOrg() (2020-01-27)", + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/migrations/:migration_id/archive" + }, + getCommitAuthors: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + } + }, + url: "/repos/:owner/:repo/import/authors" + }, + getImportProgress: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/import" + }, + getLargeFiles: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/import/large_files" + }, + getStatusForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + } + }, + url: "/user/migrations/:migration_id" + }, + getStatusForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/migrations/:migration_id" + }, + listForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/migrations" + }, + listForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/migrations" + }, + listReposForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/migrations/:migration_id/repositories" + }, + listReposForUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "GET", + params: { + migration_id: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/:migration_id/repositories" + }, + mapCommitAuthor: { + method: "PATCH", + params: { + author_id: { + required: true, + type: "integer" + }, + email: { + type: "string" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/import/authors/:author_id" + }, + setLfsPreference: { + method: "PATCH", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + use_lfs: { + enum: ["opt_in", "opt_out"], + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/import/lfs" + }, + startForAuthenticatedUser: { + method: "POST", + params: { + exclude_attachments: { + type: "boolean" + }, + lock_repositories: { + type: "boolean" + }, + repositories: { + required: true, + type: "string[]" + } + }, + url: "/user/migrations" + }, + startForOrg: { + method: "POST", + params: { + exclude_attachments: { + type: "boolean" + }, + lock_repositories: { + type: "boolean" + }, + org: { + required: true, + type: "string" + }, + repositories: { + required: true, + type: "string[]" + } + }, + url: "/orgs/:org/migrations" + }, + startImport: { + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + tfvc_project: { + type: "string" + }, + vcs: { + enum: ["subversion", "git", "mercurial", "tfvc"], + type: "string" + }, + vcs_password: { + type: "string" + }, + vcs_url: { + required: true, + type: "string" + }, + vcs_username: { + type: "string" + } + }, + url: "/repos/:owner/:repo/import" + }, + unlockRepoForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "DELETE", + params: { + migration_id: { + required: true, + type: "integer" + }, + repo_name: { + required: true, + type: "string" + } + }, + url: "/user/migrations/:migration_id/repos/:repo_name/lock" + }, + unlockRepoForOrg: { + headers: { + accept: "application/vnd.github.wyandotte-preview+json" + }, + method: "DELETE", + params: { + migration_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + repo_name: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/migrations/:migration_id/repos/:repo_name/lock" + }, + updateImport: { + method: "PATCH", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + vcs_password: { + type: "string" + }, + vcs_username: { + type: "string" + } + }, + url: "/repos/:owner/:repo/import" + } + }, + oauthAuthorizations: { + checkAuthorization: { + deprecated: "octokit.oauthAuthorizations.checkAuthorization() has been renamed to octokit.apps.checkAuthorization() (2019-11-05)", + method: "GET", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + createAuthorization: { + deprecated: "octokit.oauthAuthorizations.createAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization", + method: "POST", + params: { + client_id: { + type: "string" + }, + client_secret: { + type: "string" + }, + fingerprint: { + type: "string" + }, + note: { + required: true, + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" + } + }, + url: "/authorizations" + }, + deleteAuthorization: { + deprecated: "octokit.oauthAuthorizations.deleteAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-an-authorization", + method: "DELETE", + params: { + authorization_id: { + required: true, + type: "integer" + } + }, + url: "/authorizations/:authorization_id" + }, + deleteGrant: { + deprecated: "octokit.oauthAuthorizations.deleteGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#delete-a-grant", + method: "DELETE", + params: { + grant_id: { + required: true, + type: "integer" + } + }, + url: "/applications/grants/:grant_id" + }, + getAuthorization: { + deprecated: "octokit.oauthAuthorizations.getAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-authorization", + method: "GET", + params: { + authorization_id: { + required: true, + type: "integer" + } + }, + url: "/authorizations/:authorization_id" + }, + getGrant: { + deprecated: "octokit.oauthAuthorizations.getGrant() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-a-single-grant", + method: "GET", + params: { + grant_id: { + required: true, + type: "integer" + } + }, + url: "/applications/grants/:grant_id" + }, + getOrCreateAuthorizationForApp: { + deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForApp() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app", + method: "PUT", + params: { + client_id: { + required: true, + type: "string" + }, + client_secret: { + required: true, + type: "string" + }, + fingerprint: { + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" + } + }, + url: "/authorizations/clients/:client_id" + }, + getOrCreateAuthorizationForAppAndFingerprint: { + deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app-and-fingerprint", + method: "PUT", + params: { + client_id: { + required: true, + type: "string" + }, + client_secret: { + required: true, + type: "string" + }, + fingerprint: { + required: true, + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" + } + }, + url: "/authorizations/clients/:client_id/:fingerprint" + }, + getOrCreateAuthorizationForAppFingerprint: { + deprecated: "octokit.oauthAuthorizations.getOrCreateAuthorizationForAppFingerprint() has been renamed to octokit.oauthAuthorizations.getOrCreateAuthorizationForAppAndFingerprint() (2018-12-27)", + method: "PUT", + params: { + client_id: { + required: true, + type: "string" + }, + client_secret: { + required: true, + type: "string" + }, + fingerprint: { + required: true, + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + scopes: { + type: "string[]" + } + }, + url: "/authorizations/clients/:client_id/:fingerprint" + }, + listAuthorizations: { + deprecated: "octokit.oauthAuthorizations.listAuthorizations() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-authorizations", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/authorizations" + }, + listGrants: { + deprecated: "octokit.oauthAuthorizations.listGrants() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#list-your-grants", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/applications/grants" + }, + resetAuthorization: { + deprecated: "octokit.oauthAuthorizations.resetAuthorization() has been renamed to octokit.apps.resetAuthorization() (2019-11-05)", + method: "POST", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + revokeAuthorizationForApplication: { + deprecated: "octokit.oauthAuthorizations.revokeAuthorizationForApplication() has been renamed to octokit.apps.revokeAuthorizationForApplication() (2019-11-05)", + method: "DELETE", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/tokens/:access_token" + }, + revokeGrantForApplication: { + deprecated: "octokit.oauthAuthorizations.revokeGrantForApplication() has been renamed to octokit.apps.revokeGrantForApplication() (2019-11-05)", + method: "DELETE", + params: { + access_token: { + required: true, + type: "string" + }, + client_id: { + required: true, + type: "string" + } + }, + url: "/applications/:client_id/grants/:access_token" + }, + updateAuthorization: { + deprecated: "octokit.oauthAuthorizations.updateAuthorization() is deprecated, see https://developer.github.com/v3/oauth_authorizations/#update-an-existing-authorization", + method: "PATCH", + params: { + add_scopes: { + type: "string[]" + }, + authorization_id: { + required: true, + type: "integer" + }, + fingerprint: { + type: "string" + }, + note: { + type: "string" + }, + note_url: { + type: "string" + }, + remove_scopes: { + type: "string[]" + }, + scopes: { + type: "string[]" + } + }, + url: "/authorizations/:authorization_id" + } + }, + orgs: { + addOrUpdateMembership: { + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + role: { + enum: ["admin", "member"], + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/memberships/:username" + }, + blockUser: { + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/blocks/:username" + }, + checkBlockedUser: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/blocks/:username" + }, + checkMembership: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/members/:username" + }, + checkPublicMembership: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/public_members/:username" + }, + concealMembership: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/public_members/:username" + }, + convertMemberToOutsideCollaborator: { + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/outside_collaborators/:username" + }, + createHook: { + method: "POST", + params: { + active: { + type: "boolean" + }, + config: { + required: true, + type: "object" + }, + "config.content_type": { + type: "string" + }, + "config.insecure_ssl": { + type: "string" + }, + "config.secret": { + type: "string" + }, + "config.url": { + required: true, + type: "string" + }, + events: { + type: "string[]" + }, + name: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/hooks" + }, + createInvitation: { + method: "POST", + params: { + email: { + type: "string" + }, + invitee_id: { + type: "integer" + }, + org: { + required: true, + type: "string" + }, + role: { + enum: ["admin", "direct_member", "billing_manager"], + type: "string" + }, + team_ids: { + type: "integer[]" + } + }, + url: "/orgs/:org/invitations" + }, + deleteHook: { + method: "DELETE", + params: { + hook_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/hooks/:hook_id" + }, + get: { + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org" + }, + getHook: { + method: "GET", + params: { + hook_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/hooks/:hook_id" + }, + getMembership: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/memberships/:username" + }, + getMembershipForAuthenticatedUser: { + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/user/memberships/orgs/:org" + }, + list: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "integer" + } + }, + url: "/organizations" + }, + listBlockedUsers: { + method: "GET", + params: { + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/blocks" + }, + listForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/orgs" + }, + listForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/orgs" + }, + listHooks: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/hooks" + }, + listInstallations: { + headers: { + accept: "application/vnd.github.machine-man-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/installations" + }, + listInvitationTeams: { + method: "GET", + params: { + invitation_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/invitations/:invitation_id/teams" + }, + listMembers: { + method: "GET", + params: { + filter: { + enum: ["2fa_disabled", "all"], + type: "string" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + role: { + enum: ["all", "admin", "member"], + type: "string" + } + }, + url: "/orgs/:org/members" + }, + listMemberships: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + state: { + enum: ["active", "pending"], + type: "string" + } + }, + url: "/user/memberships/orgs" + }, + listOutsideCollaborators: { + method: "GET", + params: { + filter: { + enum: ["2fa_disabled", "all"], + type: "string" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/outside_collaborators" + }, + listPendingInvitations: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/invitations" + }, + listPublicMembers: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/public_members" + }, + pingHook: { + method: "POST", + params: { + hook_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/hooks/:hook_id/pings" + }, + publicizeMembership: { + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/public_members/:username" + }, + removeMember: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/members/:username" + }, + removeMembership: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/memberships/:username" + }, + removeOutsideCollaborator: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/outside_collaborators/:username" + }, + unblockUser: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/blocks/:username" + }, + update: { + method: "PATCH", + params: { + billing_email: { + type: "string" + }, + company: { + type: "string" + }, + default_repository_permission: { + enum: ["read", "write", "admin", "none"], + type: "string" + }, + description: { + type: "string" + }, + email: { + type: "string" + }, + has_organization_projects: { + type: "boolean" + }, + has_repository_projects: { + type: "boolean" + }, + location: { + type: "string" + }, + members_allowed_repository_creation_type: { + enum: ["all", "private", "none"], + type: "string" + }, + members_can_create_internal_repositories: { + type: "boolean" + }, + members_can_create_private_repositories: { + type: "boolean" + }, + members_can_create_public_repositories: { + type: "boolean" + }, + members_can_create_repositories: { + type: "boolean" + }, + name: { + type: "string" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org" + }, + updateHook: { + method: "PATCH", + params: { + active: { + type: "boolean" + }, + config: { + type: "object" + }, + "config.content_type": { + type: "string" + }, + "config.insecure_ssl": { + type: "string" + }, + "config.secret": { + type: "string" + }, + "config.url": { + required: true, + type: "string" + }, + events: { + type: "string[]" + }, + hook_id: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/hooks/:hook_id" + }, + updateMembership: { + method: "PATCH", + params: { + org: { + required: true, + type: "string" + }, + state: { + enum: ["active"], + required: true, + type: "string" + } + }, + url: "/user/memberships/orgs/:org" + } + }, + projects: { + addCollaborator: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", + params: { + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/projects/:project_id/collaborators/:username" + }, + createCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + column_id: { + required: true, + type: "integer" + }, + content_id: { + type: "integer" + }, + content_type: { + type: "string" + }, + note: { + type: "string" + } + }, + url: "/projects/columns/:column_id/cards" + }, + createColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + name: { + required: true, + type: "string" + }, + project_id: { + required: true, + type: "integer" + } + }, + url: "/projects/:project_id/columns" + }, + createForAuthenticatedUser: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + body: { + type: "string" + }, + name: { + required: true, + type: "string" + } + }, + url: "/user/projects" + }, + createForOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + body: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/projects" + }, + createForRepo: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + body: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/projects" + }, + delete: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "DELETE", + params: { + project_id: { + required: true, + type: "integer" + } + }, + url: "/projects/:project_id" + }, + deleteCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "DELETE", + params: { + card_id: { + required: true, + type: "integer" + } + }, + url: "/projects/columns/cards/:card_id" + }, + deleteColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "DELETE", + params: { + column_id: { + required: true, + type: "integer" + } + }, + url: "/projects/columns/:column_id" + }, + get: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + project_id: { + required: true, + type: "integer" + } + }, + url: "/projects/:project_id" + }, + getCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + card_id: { + required: true, + type: "integer" + } + }, + url: "/projects/columns/cards/:card_id" + }, + getColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + column_id: { + required: true, + type: "integer" + } + }, + url: "/projects/columns/:column_id" + }, + listCards: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + archived_state: { + enum: ["all", "archived", "not_archived"], + type: "string" + }, + column_id: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/projects/columns/:column_id/cards" + }, + listCollaborators: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + affiliation: { + enum: ["outside", "direct", "all"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + project_id: { + required: true, + type: "integer" + } + }, + url: "/projects/:project_id/collaborators" + }, + listColumns: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + project_id: { + required: true, + type: "integer" + } + }, + url: "/projects/:project_id/columns" + }, + listForOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/orgs/:org/projects" + }, + listForRepo: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/repos/:owner/:repo/projects" + }, + listForUser: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/projects" + }, + moveCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + card_id: { + required: true, + type: "integer" + }, + column_id: { + type: "integer" + }, + position: { + required: true, + type: "string", + validation: "^(top|bottom|after:\\d+)$" + } + }, + url: "/projects/columns/cards/:card_id/moves" + }, + moveColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "POST", + params: { + column_id: { + required: true, + type: "integer" + }, + position: { + required: true, + type: "string", + validation: "^(first|last|after:\\d+)$" + } + }, + url: "/projects/columns/:column_id/moves" + }, + removeCollaborator: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "DELETE", + params: { + project_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/projects/:project_id/collaborators/:username" + }, + reviewUserPermissionLevel: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + project_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/projects/:project_id/collaborators/:username/permission" + }, + update: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PATCH", + params: { + body: { + type: "string" + }, + name: { + type: "string" + }, + organization_permission: { + type: "string" + }, + private: { + type: "boolean" + }, + project_id: { + required: true, + type: "integer" + }, + state: { + enum: ["open", "closed"], + type: "string" + } + }, + url: "/projects/:project_id" + }, + updateCard: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PATCH", + params: { + archived: { + type: "boolean" + }, + card_id: { + required: true, + type: "integer" + }, + note: { + type: "string" + } + }, + url: "/projects/columns/cards/:card_id" + }, + updateColumn: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PATCH", + params: { + column_id: { + required: true, + type: "integer" + }, + name: { + required: true, + type: "string" + } + }, + url: "/projects/columns/:column_id" + } + }, + pulls: { + checkIfMerged: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/merge" + }, + create: { + method: "POST", + params: { + base: { + required: true, + type: "string" + }, + body: { + type: "string" + }, + draft: { + type: "boolean" + }, + head: { + required: true, + type: "string" + }, + maintainer_can_modify: { + type: "boolean" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + title: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls" + }, + createComment: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + commit_id: { + required: true, + type: "string" + }, + in_reply_to: { + deprecated: true, + description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.", + type: "integer" + }, + line: { + type: "integer" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + position: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + side: { + enum: ["LEFT", "RIGHT"], + type: "string" + }, + start_line: { + type: "integer" + }, + start_side: { + enum: ["LEFT", "RIGHT", "side"], + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/comments" + }, + createCommentReply: { + deprecated: "octokit.pulls.createCommentReply() has been renamed to octokit.pulls.createComment() (2019-09-09)", + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + commit_id: { + required: true, + type: "string" + }, + in_reply_to: { + deprecated: true, + description: "The comment ID to reply to. **Note**: This must be the ID of a top-level comment, not a reply to that comment. Replies to replies are not supported.", + type: "integer" + }, + line: { + type: "integer" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + position: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + side: { + enum: ["LEFT", "RIGHT"], + type: "string" + }, + start_line: { + type: "integer" + }, + start_side: { + enum: ["LEFT", "RIGHT", "side"], + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/comments" + }, + createFromIssue: { + deprecated: "octokit.pulls.createFromIssue() is deprecated, see https://developer.github.com/v3/pulls/#create-a-pull-request", + method: "POST", + params: { + base: { + required: true, + type: "string" + }, + draft: { + type: "boolean" + }, + head: { + required: true, + type: "string" + }, + issue: { + required: true, + type: "integer" + }, + maintainer_can_modify: { + type: "boolean" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls" + }, + createReview: { + method: "POST", + params: { + body: { + type: "string" + }, + comments: { + type: "object[]" + }, + "comments[].body": { + required: true, + type: "string" + }, + "comments[].path": { + required: true, + type: "string" + }, + "comments[].position": { + required: true, + type: "integer" + }, + commit_id: { + type: "string" + }, + event: { + enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"], + type: "string" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews" + }, + createReviewCommentReply: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/comments/:comment_id/replies" + }, + createReviewRequest: { + method: "POST", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + reviewers: { + type: "string[]" + }, + team_reviewers: { + type: "string[]" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + }, + deleteComment: { + method: "DELETE", + params: { + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/comments/:comment_id" + }, + deletePendingReview: { + method: "DELETE", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + review_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" + }, + deleteReviewRequest: { + method: "DELETE", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + reviewers: { + type: "string[]" + }, + team_reviewers: { + type: "string[]" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + }, + dismissReview: { + method: "PUT", + params: { + message: { + required: true, + type: "string" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + review_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/dismissals" + }, + get: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number" + }, + getComment: { + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/comments/:comment_id" + }, + getCommentsForReview: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + review_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/comments" + }, + getReview: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + review_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" + }, + list: { + method: "GET", + params: { + base: { + type: "string" + }, + direction: { + enum: ["asc", "desc"], + type: "string" + }, + head: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + sort: { + enum: ["created", "updated", "popularity", "long-running"], + type: "string" + }, + state: { + enum: ["open", "closed", "all"], + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls" + }, + listComments: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/comments" + }, + listCommentsForRepo: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + since: { + type: "string" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/comments" + }, + listCommits: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/commits" + }, + listFiles: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/files" + }, + listReviewRequests: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/requested_reviewers" + }, + listReviews: { + method: "GET", + params: { + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews" + }, + merge: { + method: "PUT", + params: { + commit_message: { + type: "string" + }, + commit_title: { + type: "string" + }, + merge_method: { + enum: ["merge", "squash", "rebase"], + type: "string" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + sha: { + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/merge" + }, + submitReview: { + method: "POST", + params: { + body: { + type: "string" + }, + event: { + enum: ["APPROVE", "REQUEST_CHANGES", "COMMENT"], + required: true, + type: "string" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + review_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id/events" + }, + update: { + method: "PATCH", + params: { + base: { + type: "string" + }, + body: { + type: "string" + }, + maintainer_can_modify: { + type: "boolean" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + state: { + enum: ["open", "closed"], + type: "string" + }, + title: { + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number" + }, + updateBranch: { + headers: { + accept: "application/vnd.github.lydian-preview+json" + }, + method: "PUT", + params: { + expected_head_sha: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/update-branch" + }, + updateComment: { + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/comments/:comment_id" + }, + updateReview: { + method: "PUT", + params: { + body: { + required: true, + type: "string" + }, + number: { + alias: "pull_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + pull_number: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + review_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/pulls/:pull_number/reviews/:review_id" + } + }, + rateLimit: { + get: { + method: "GET", + params: {}, + url: "/rate_limit" + } + }, + reactions: { + createForCommitComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/comments/:comment_id/reactions" + }, + createForIssue: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/reactions" + }, + createForIssueComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions" + }, + createForPullRequestReviewComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions" + }, + createForTeamDiscussion: { + deprecated: "octokit.reactions.createForTeamDiscussion() has been renamed to octokit.reactions.createForTeamDiscussionLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/reactions" + }, + createForTeamDiscussionComment: { + deprecated: "octokit.reactions.createForTeamDiscussionComment() has been renamed to octokit.reactions.createForTeamDiscussionCommentLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_number: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + }, + createForTeamDiscussionCommentInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_number: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions" + }, + createForTeamDiscussionCommentLegacy: { + deprecated: "octokit.reactions.createForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-comment-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + comment_number: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + }, + createForTeamDiscussionInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions" + }, + createForTeamDiscussionLegacy: { + deprecated: "octokit.reactions.createForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#create-reaction-for-a-team-discussion-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "POST", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/reactions" + }, + delete: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "DELETE", + params: { + reaction_id: { + required: true, + type: "integer" + } + }, + url: "/reactions/:reaction_id" + }, + listForCommitComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/comments/:comment_id/reactions" + }, + listForIssue: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + issue_number: { + required: true, + type: "integer" + }, + number: { + alias: "issue_number", + deprecated: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/:issue_number/reactions" + }, + listForIssueComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/issues/comments/:comment_id/reactions" + }, + listForPullRequestReviewComment: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pulls/comments/:comment_id/reactions" + }, + listForTeamDiscussion: { + deprecated: "octokit.reactions.listForTeamDiscussion() has been renamed to octokit.reactions.listForTeamDiscussionLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/reactions" + }, + listForTeamDiscussionComment: { + deprecated: "octokit.reactions.listForTeamDiscussionComment() has been renamed to octokit.reactions.listForTeamDiscussionCommentLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + }, + listForTeamDiscussionCommentInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number/reactions" + }, + listForTeamDiscussionCommentLegacy: { + deprecated: "octokit.reactions.listForTeamDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-comment-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" + }, + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number/reactions" + }, + listForTeamDiscussionInOrg: { + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/reactions" + }, + listForTeamDiscussionLegacy: { + deprecated: "octokit.reactions.listForTeamDiscussionLegacy() is deprecated, see https://developer.github.com/v3/reactions/#list-reactions-for-a-team-discussion-legacy", + headers: { + accept: "application/vnd.github.squirrel-girl-preview+json" + }, + method: "GET", + params: { + content: { + enum: ["+1", "-1", "laugh", "confused", "heart", "hooray", "rocket", "eyes"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/reactions" + } + }, + repos: { + acceptInvitation: { + method: "PATCH", + params: { + invitation_id: { + required: true, + type: "integer" + } + }, + url: "/user/repository_invitations/:invitation_id" + }, + addCollaborator: { + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + repo: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/collaborators/:username" + }, + addDeployKey: { + method: "POST", + params: { + key: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + read_only: { + type: "boolean" + }, + repo: { + required: true, + type: "string" + }, + title: { + type: "string" + } + }, + url: "/repos/:owner/:repo/keys" + }, + addProtectedBranchAdminEnforcement: { + method: "POST", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" + }, + addProtectedBranchAppRestrictions: { + method: "POST", + params: { + apps: { + mapTo: "data", + required: true, + type: "string[]" + }, + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + }, + addProtectedBranchRequiredSignatures: { + headers: { + accept: "application/vnd.github.zzzax-preview+json" + }, + method: "POST", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" + }, + addProtectedBranchRequiredStatusChecksContexts: { + method: "POST", + params: { + branch: { + required: true, + type: "string" + }, + contexts: { + mapTo: "data", + required: true, + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + }, + addProtectedBranchTeamRestrictions: { + method: "POST", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + teams: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + addProtectedBranchUserRestrictions: { + method: "POST", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + users: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + }, + checkCollaborator: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/collaborators/:username" + }, + checkVulnerabilityAlerts: { + headers: { + accept: "application/vnd.github.dorian-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/vulnerability-alerts" + }, + compareCommits: { + method: "GET", + params: { + base: { + required: true, + type: "string" + }, + head: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/compare/:base...:head" + }, + createCommitComment: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + commit_sha: { + required: true, + type: "string" + }, + line: { + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + path: { + type: "string" + }, + position: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + sha: { + alias: "commit_sha", + deprecated: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:commit_sha/comments" + }, + createDeployment: { + method: "POST", + params: { + auto_merge: { + type: "boolean" + }, + description: { + type: "string" + }, + environment: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + payload: { + type: "string" + }, + production_environment: { + type: "boolean" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + required_contexts: { + type: "string[]" + }, + task: { + type: "string" + }, + transient_environment: { + type: "boolean" + } + }, + url: "/repos/:owner/:repo/deployments" + }, + createDeploymentStatus: { + method: "POST", + params: { + auto_inactive: { + type: "boolean" + }, + deployment_id: { + required: true, + type: "integer" + }, + description: { + type: "string" + }, + environment: { + enum: ["production", "staging", "qa"], + type: "string" + }, + environment_url: { + type: "string" + }, + log_url: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + state: { + enum: ["error", "failure", "inactive", "in_progress", "queued", "pending", "success"], + required: true, + type: "string" + }, + target_url: { + type: "string" + } + }, + url: "/repos/:owner/:repo/deployments/:deployment_id/statuses" + }, + createDispatchEvent: { + method: "POST", + params: { + client_payload: { + type: "object" + }, + event_type: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/dispatches" + }, + createFile: { + deprecated: "octokit.repos.createFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)", + method: "PUT", + params: { + author: { + type: "object" + }, + "author.email": { + required: true, + type: "string" + }, + "author.name": { + required: true, + type: "string" + }, + branch: { + type: "string" + }, + committer: { + type: "object" + }, + "committer.email": { + required: true, + type: "string" + }, + "committer.name": { + required: true, + type: "string" + }, + content: { + required: true, + type: "string" + }, + message: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + type: "string" + } + }, + url: "/repos/:owner/:repo/contents/:path" + }, + createForAuthenticatedUser: { + method: "POST", + params: { + allow_merge_commit: { + type: "boolean" + }, + allow_rebase_merge: { + type: "boolean" + }, + allow_squash_merge: { + type: "boolean" + }, + auto_init: { + type: "boolean" + }, + delete_branch_on_merge: { + type: "boolean" + }, + description: { + type: "string" + }, + gitignore_template: { + type: "string" + }, + has_issues: { + type: "boolean" + }, + has_projects: { + type: "boolean" + }, + has_wiki: { + type: "boolean" + }, + homepage: { + type: "string" + }, + is_template: { + type: "boolean" + }, + license_template: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + private: { + type: "boolean" + }, + team_id: { + type: "integer" + }, + visibility: { + enum: ["public", "private", "visibility", "internal"], + type: "string" + } + }, + url: "/user/repos" + }, + createFork: { + method: "POST", + params: { + organization: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/forks" + }, + createHook: { + method: "POST", + params: { + active: { + type: "boolean" + }, + config: { + required: true, + type: "object" + }, + "config.content_type": { + type: "string" + }, + "config.insecure_ssl": { + type: "string" + }, + "config.secret": { + type: "string" + }, + "config.url": { + required: true, + type: "string" + }, + events: { + type: "string[]" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks" + }, + createInOrg: { + method: "POST", + params: { + allow_merge_commit: { + type: "boolean" + }, + allow_rebase_merge: { + type: "boolean" + }, + allow_squash_merge: { + type: "boolean" + }, + auto_init: { + type: "boolean" + }, + delete_branch_on_merge: { + type: "boolean" + }, + description: { + type: "string" + }, + gitignore_template: { + type: "string" + }, + has_issues: { + type: "boolean" + }, + has_projects: { + type: "boolean" + }, + has_wiki: { + type: "boolean" + }, + homepage: { + type: "string" + }, + is_template: { + type: "boolean" + }, + license_template: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + }, + private: { + type: "boolean" + }, + team_id: { + type: "integer" + }, + visibility: { + enum: ["public", "private", "visibility", "internal"], + type: "string" + } + }, + url: "/orgs/:org/repos" + }, + createOrUpdateFile: { + method: "PUT", + params: { + author: { + type: "object" + }, + "author.email": { + required: true, + type: "string" + }, + "author.name": { + required: true, + type: "string" + }, + branch: { + type: "string" + }, + committer: { + type: "object" + }, + "committer.email": { + required: true, + type: "string" + }, + "committer.name": { + required: true, + type: "string" + }, + content: { + required: true, + type: "string" + }, + message: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + type: "string" + } + }, + url: "/repos/:owner/:repo/contents/:path" + }, + createRelease: { + method: "POST", + params: { + body: { + type: "string" + }, + draft: { + type: "boolean" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + prerelease: { + type: "boolean" + }, + repo: { + required: true, + type: "string" + }, + tag_name: { + required: true, + type: "string" + }, + target_commitish: { + type: "string" + } + }, + url: "/repos/:owner/:repo/releases" + }, + createStatus: { + method: "POST", + params: { + context: { + type: "string" + }, + description: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + required: true, + type: "string" + }, + state: { + enum: ["error", "failure", "pending", "success"], + required: true, + type: "string" + }, + target_url: { + type: "string" + } + }, + url: "/repos/:owner/:repo/statuses/:sha" + }, + createUsingTemplate: { + headers: { + accept: "application/vnd.github.baptiste-preview+json" + }, + method: "POST", + params: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + owner: { + type: "string" + }, + private: { + type: "boolean" + }, + template_owner: { + required: true, + type: "string" + }, + template_repo: { + required: true, + type: "string" + } + }, + url: "/repos/:template_owner/:template_repo/generate" + }, + declineInvitation: { + method: "DELETE", + params: { + invitation_id: { + required: true, + type: "integer" + } + }, + url: "/user/repository_invitations/:invitation_id" + }, + delete: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo" + }, + deleteCommitComment: { + method: "DELETE", + params: { + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/comments/:comment_id" + }, + deleteDownload: { + method: "DELETE", + params: { + download_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/downloads/:download_id" + }, + deleteFile: { + method: "DELETE", + params: { + author: { + type: "object" + }, + "author.email": { + type: "string" + }, + "author.name": { + type: "string" + }, + branch: { + type: "string" + }, + committer: { + type: "object" + }, + "committer.email": { + type: "string" + }, + "committer.name": { + type: "string" + }, + message: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/contents/:path" + }, + deleteHook: { + method: "DELETE", + params: { + hook_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks/:hook_id" + }, + deleteInvitation: { + method: "DELETE", + params: { + invitation_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/invitations/:invitation_id" + }, + deleteRelease: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + release_id: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/:release_id" + }, + deleteReleaseAsset: { + method: "DELETE", + params: { + asset_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/assets/:asset_id" + }, + disableAutomatedSecurityFixes: { + headers: { + accept: "application/vnd.github.london-preview+json" + }, + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/automated-security-fixes" + }, + disablePagesSite: { + headers: { + accept: "application/vnd.github.switcheroo-preview+json" + }, + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pages" + }, + disableVulnerabilityAlerts: { + headers: { + accept: "application/vnd.github.dorian-preview+json" + }, + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/vulnerability-alerts" + }, + enableAutomatedSecurityFixes: { + headers: { + accept: "application/vnd.github.london-preview+json" + }, + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/automated-security-fixes" + }, + enablePagesSite: { + headers: { + accept: "application/vnd.github.switcheroo-preview+json" + }, + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + source: { + type: "object" + }, + "source.branch": { + enum: ["master", "gh-pages"], + type: "string" + }, + "source.path": { + type: "string" + } + }, + url: "/repos/:owner/:repo/pages" + }, + enableVulnerabilityAlerts: { + headers: { + accept: "application/vnd.github.dorian-preview+json" + }, + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/vulnerability-alerts" + }, + get: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo" + }, + getAppsWithAccessToProtectedBranch: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + }, + getArchiveLink: { + method: "GET", + params: { + archive_format: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/:archive_format/:ref" + }, + getBranch: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch" + }, + getBranchProtection: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection" + }, + getClones: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + per: { + enum: ["day", "week"], + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/traffic/clones" + }, + getCodeFrequencyStats: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/stats/code_frequency" + }, + getCollaboratorPermissionLevel: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/collaborators/:username/permission" + }, + getCombinedStatusForRef: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:ref/status" + }, + getCommit: { + method: "GET", + params: { + commit_sha: { + alias: "ref", + deprecated: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + alias: "ref", + deprecated: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:ref" + }, + getCommitActivityStats: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/stats/commit_activity" + }, + getCommitComment: { + method: "GET", + params: { + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/comments/:comment_id" + }, + getCommitRefSha: { + deprecated: "octokit.repos.getCommitRefSha() is deprecated, see https://developer.github.com/v3/repos/commits/#get-a-single-commit", + headers: { + accept: "application/vnd.github.v3.sha" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:ref" + }, + getContents: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + ref: { + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/contents/:path" + }, + getContributorsStats: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/stats/contributors" + }, + getDeployKey: { + method: "GET", + params: { + key_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/keys/:key_id" + }, + getDeployment: { + method: "GET", + params: { + deployment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/deployments/:deployment_id" + }, + getDeploymentStatus: { + method: "GET", + params: { + deployment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + status_id: { + required: true, + type: "integer" + } + }, + url: "/repos/:owner/:repo/deployments/:deployment_id/statuses/:status_id" + }, + getDownload: { + method: "GET", + params: { + download_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/downloads/:download_id" + }, + getHook: { + method: "GET", + params: { + hook_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks/:hook_id" + }, + getLatestPagesBuild: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pages/builds/latest" + }, + getLatestRelease: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/latest" + }, + getPages: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pages" + }, + getPagesBuild: { + method: "GET", + params: { + build_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pages/builds/:build_id" + }, + getParticipationStats: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/stats/participation" + }, + getProtectedBranchAdminEnforcement: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" + }, + getProtectedBranchPullRequestReviewEnforcement: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" + }, + getProtectedBranchRequiredSignatures: { + headers: { + accept: "application/vnd.github.zzzax-preview+json" + }, + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" + }, + getProtectedBranchRequiredStatusChecks: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" + }, + getProtectedBranchRestrictions: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions" + }, + getPunchCardStats: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/stats/punch_card" + }, + getReadme: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + ref: { + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/readme" + }, + getRelease: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + release_id: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/:release_id" + }, + getReleaseAsset: { + method: "GET", + params: { + asset_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/assets/:asset_id" + }, + getReleaseByTag: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + tag: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/tags/:tag" + }, + getTeamsWithAccessToProtectedBranch: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + getTopPaths: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/traffic/popular/paths" + }, + getTopReferrers: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/traffic/popular/referrers" + }, + getUsersWithAccessToProtectedBranch: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + }, + getViews: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + per: { + enum: ["day", "week"], + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/traffic/views" + }, + list: { + method: "GET", + params: { + affiliation: { + type: "string" + }, + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated", "pushed", "full_name"], + type: "string" + }, + type: { + enum: ["all", "owner", "public", "private", "member"], + type: "string" + }, + visibility: { + enum: ["all", "public", "private"], + type: "string" + } + }, + url: "/user/repos" + }, + listAppsWithAccessToProtectedBranch: { + deprecated: "octokit.repos.listAppsWithAccessToProtectedBranch() has been renamed to octokit.repos.getAppsWithAccessToProtectedBranch() (2019-09-13)", + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + }, + listAssetsForRelease: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + release_id: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/:release_id/assets" + }, + listBranches: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + protected: { + type: "boolean" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches" + }, + listBranchesForHeadCommit: { + headers: { + accept: "application/vnd.github.groot-preview+json" + }, + method: "GET", + params: { + commit_sha: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:commit_sha/branches-where-head" + }, + listCollaborators: { + method: "GET", + params: { + affiliation: { + enum: ["outside", "direct", "all"], + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/collaborators" + }, + listCommentsForCommit: { + method: "GET", + params: { + commit_sha: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + alias: "commit_sha", + deprecated: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:commit_sha/comments" + }, + listCommitComments: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/comments" + }, + listCommits: { + method: "GET", + params: { + author: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + path: { + type: "string" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + sha: { + type: "string" + }, + since: { + type: "string" + }, + until: { + type: "string" + } + }, + url: "/repos/:owner/:repo/commits" + }, + listContributors: { + method: "GET", + params: { + anon: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/contributors" + }, + listDeployKeys: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/keys" + }, + listDeploymentStatuses: { + method: "GET", + params: { + deployment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/deployments/:deployment_id/statuses" + }, + listDeployments: { + method: "GET", + params: { + environment: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + type: "string" + }, + task: { + type: "string" + } + }, + url: "/repos/:owner/:repo/deployments" + }, + listDownloads: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/downloads" + }, + listForOrg: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated", "pushed", "full_name"], + type: "string" + }, + type: { + enum: ["all", "public", "private", "forks", "sources", "member", "internal"], + type: "string" + } + }, + url: "/orgs/:org/repos" + }, + listForUser: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + sort: { + enum: ["created", "updated", "pushed", "full_name"], + type: "string" + }, + type: { + enum: ["all", "owner", "member"], + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/repos" + }, + listForks: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + sort: { + enum: ["newest", "oldest", "stargazers"], + type: "string" + } + }, + url: "/repos/:owner/:repo/forks" + }, + listHooks: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks" + }, + listInvitations: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/invitations" + }, + listInvitationsForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/repository_invitations" + }, + listLanguages: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/languages" + }, + listPagesBuilds: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pages/builds" + }, + listProtectedBranchRequiredStatusChecksContexts: { + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + }, + listProtectedBranchTeamRestrictions: { + deprecated: "octokit.repos.listProtectedBranchTeamRestrictions() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-09)", + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + listProtectedBranchUserRestrictions: { + deprecated: "octokit.repos.listProtectedBranchUserRestrictions() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-09)", + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + }, + listPublic: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "integer" + } + }, + url: "/repositories" + }, + listPullRequestsAssociatedWithCommit: { + headers: { + accept: "application/vnd.github.groot-preview+json" + }, + method: "GET", + params: { + commit_sha: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:commit_sha/pulls" + }, + listReleases: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases" + }, + listStatusesForRef: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + ref: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/commits/:ref/statuses" + }, + listTags: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/tags" + }, + listTeams: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/teams" + }, + listTeamsWithAccessToProtectedBranch: { + deprecated: "octokit.repos.listTeamsWithAccessToProtectedBranch() has been renamed to octokit.repos.getTeamsWithAccessToProtectedBranch() (2019-09-13)", + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + listTopics: { + headers: { + accept: "application/vnd.github.mercy-preview+json" + }, + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/topics" + }, + listUsersWithAccessToProtectedBranch: { + deprecated: "octokit.repos.listUsersWithAccessToProtectedBranch() has been renamed to octokit.repos.getUsersWithAccessToProtectedBranch() (2019-09-13)", + method: "GET", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + }, + merge: { + method: "POST", + params: { + base: { + required: true, + type: "string" + }, + commit_message: { + type: "string" + }, + head: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/merges" + }, + pingHook: { + method: "POST", + params: { + hook_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks/:hook_id/pings" + }, + removeBranchProtection: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection" + }, + removeCollaborator: { + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/collaborators/:username" + }, + removeDeployKey: { + method: "DELETE", + params: { + key_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/keys/:key_id" + }, + removeProtectedBranchAdminEnforcement: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/enforce_admins" + }, + removeProtectedBranchAppRestrictions: { + method: "DELETE", + params: { + apps: { + mapTo: "data", + required: true, + type: "string[]" + }, + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + }, + removeProtectedBranchPullRequestReviewEnforcement: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" + }, + removeProtectedBranchRequiredSignatures: { + headers: { + accept: "application/vnd.github.zzzax-preview+json" + }, + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_signatures" + }, + removeProtectedBranchRequiredStatusChecks: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" + }, + removeProtectedBranchRequiredStatusChecksContexts: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + contexts: { + mapTo: "data", + required: true, + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + }, + removeProtectedBranchRestrictions: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions" + }, + removeProtectedBranchTeamRestrictions: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + teams: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + removeProtectedBranchUserRestrictions: { + method: "DELETE", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + users: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + }, + replaceProtectedBranchAppRestrictions: { + method: "PUT", + params: { + apps: { + mapTo: "data", + required: true, + type: "string[]" + }, + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/apps" + }, + replaceProtectedBranchRequiredStatusChecksContexts: { + method: "PUT", + params: { + branch: { + required: true, + type: "string" + }, + contexts: { + mapTo: "data", + required: true, + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks/contexts" + }, + replaceProtectedBranchTeamRestrictions: { + method: "PUT", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + teams: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/teams" + }, + replaceProtectedBranchUserRestrictions: { + method: "PUT", + params: { + branch: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + users: { + mapTo: "data", + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/restrictions/users" + }, + replaceTopics: { + headers: { + accept: "application/vnd.github.mercy-preview+json" + }, + method: "PUT", + params: { + names: { + required: true, + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/topics" + }, + requestPageBuild: { + method: "POST", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/pages/builds" + }, + retrieveCommunityProfileMetrics: { + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/community/profile" + }, + testPushHook: { + method: "POST", + params: { + hook_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks/:hook_id/tests" + }, + transfer: { + method: "POST", + params: { + new_owner: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_ids: { + type: "integer[]" + } + }, + url: "/repos/:owner/:repo/transfer" + }, + update: { + method: "PATCH", + params: { + allow_merge_commit: { + type: "boolean" + }, + allow_rebase_merge: { + type: "boolean" + }, + allow_squash_merge: { + type: "boolean" + }, + archived: { + type: "boolean" + }, + default_branch: { + type: "string" + }, + delete_branch_on_merge: { + type: "boolean" + }, + description: { + type: "string" + }, + has_issues: { + type: "boolean" + }, + has_projects: { + type: "boolean" + }, + has_wiki: { + type: "boolean" + }, + homepage: { + type: "string" + }, + is_template: { + type: "boolean" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + private: { + type: "boolean" + }, + repo: { + required: true, + type: "string" + }, + visibility: { + enum: ["public", "private", "visibility", "internal"], + type: "string" + } + }, + url: "/repos/:owner/:repo" + }, + updateBranchProtection: { + method: "PUT", + params: { + allow_deletions: { + type: "boolean" + }, + allow_force_pushes: { + allowNull: true, + type: "boolean" + }, + branch: { + required: true, + type: "string" + }, + enforce_admins: { + allowNull: true, + required: true, + type: "boolean" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + required_linear_history: { + type: "boolean" + }, + required_pull_request_reviews: { + allowNull: true, + required: true, + type: "object" + }, + "required_pull_request_reviews.dismiss_stale_reviews": { + type: "boolean" + }, + "required_pull_request_reviews.dismissal_restrictions": { + type: "object" + }, + "required_pull_request_reviews.dismissal_restrictions.teams": { + type: "string[]" + }, + "required_pull_request_reviews.dismissal_restrictions.users": { + type: "string[]" + }, + "required_pull_request_reviews.require_code_owner_reviews": { + type: "boolean" + }, + "required_pull_request_reviews.required_approving_review_count": { + type: "integer" + }, + required_status_checks: { + allowNull: true, + required: true, + type: "object" + }, + "required_status_checks.contexts": { + required: true, + type: "string[]" + }, + "required_status_checks.strict": { + required: true, + type: "boolean" + }, + restrictions: { + allowNull: true, + required: true, + type: "object" + }, + "restrictions.apps": { + type: "string[]" + }, + "restrictions.teams": { + required: true, + type: "string[]" + }, + "restrictions.users": { + required: true, + type: "string[]" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection" + }, + updateCommitComment: { + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/comments/:comment_id" + }, + updateFile: { + deprecated: "octokit.repos.updateFile() has been renamed to octokit.repos.createOrUpdateFile() (2019-06-07)", + method: "PUT", + params: { + author: { + type: "object" + }, + "author.email": { + required: true, + type: "string" + }, + "author.name": { + required: true, + type: "string" + }, + branch: { + type: "string" + }, + committer: { + type: "object" + }, + "committer.email": { + required: true, + type: "string" + }, + "committer.name": { + required: true, + type: "string" + }, + content: { + required: true, + type: "string" + }, + message: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + path: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + sha: { + type: "string" + } + }, + url: "/repos/:owner/:repo/contents/:path" + }, + updateHook: { + method: "PATCH", + params: { + active: { + type: "boolean" + }, + add_events: { + type: "string[]" + }, + config: { + type: "object" + }, + "config.content_type": { + type: "string" + }, + "config.insecure_ssl": { + type: "string" + }, + "config.secret": { + type: "string" + }, + "config.url": { + required: true, + type: "string" + }, + events: { + type: "string[]" + }, + hook_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + remove_events: { + type: "string[]" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/hooks/:hook_id" + }, + updateInformationAboutPagesSite: { + method: "PUT", + params: { + cname: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + source: { + enum: ['"gh-pages"', '"master"', '"master /docs"'], + type: "string" + } + }, + url: "/repos/:owner/:repo/pages" + }, + updateInvitation: { + method: "PATCH", + params: { + invitation_id: { + required: true, + type: "integer" + }, + owner: { + required: true, + type: "string" + }, + permissions: { + enum: ["read", "write", "admin"], + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/invitations/:invitation_id" + }, + updateProtectedBranchPullRequestReviewEnforcement: { + method: "PATCH", + params: { + branch: { + required: true, + type: "string" + }, + dismiss_stale_reviews: { + type: "boolean" + }, + dismissal_restrictions: { + type: "object" + }, + "dismissal_restrictions.teams": { + type: "string[]" + }, + "dismissal_restrictions.users": { + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + require_code_owner_reviews: { + type: "boolean" + }, + required_approving_review_count: { + type: "integer" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_pull_request_reviews" + }, + updateProtectedBranchRequiredStatusChecks: { + method: "PATCH", + params: { + branch: { + required: true, + type: "string" + }, + contexts: { + type: "string[]" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + strict: { + type: "boolean" + } + }, + url: "/repos/:owner/:repo/branches/:branch/protection/required_status_checks" + }, + updateRelease: { + method: "PATCH", + params: { + body: { + type: "string" + }, + draft: { + type: "boolean" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + prerelease: { + type: "boolean" + }, + release_id: { + required: true, + type: "integer" + }, + repo: { + required: true, + type: "string" + }, + tag_name: { + type: "string" + }, + target_commitish: { + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/:release_id" + }, + updateReleaseAsset: { + method: "PATCH", + params: { + asset_id: { + required: true, + type: "integer" + }, + label: { + type: "string" + }, + name: { + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + } + }, + url: "/repos/:owner/:repo/releases/assets/:asset_id" + }, + uploadReleaseAsset: { + method: "POST", + params: { + data: { + mapTo: "data", + required: true, + type: "string | object" + }, + file: { + alias: "data", + deprecated: true, + type: "string | object" + }, + headers: { + required: true, + type: "object" + }, + "headers.content-length": { + required: true, + type: "integer" + }, + "headers.content-type": { + required: true, + type: "string" + }, + label: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + url: { + required: true, + type: "string" + } + }, + url: ":url" + } + }, + search: { + code: { + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { + required: true, + type: "string" + }, + sort: { + enum: ["indexed"], + type: "string" + } + }, + url: "/search/code" + }, + commits: { + headers: { + accept: "application/vnd.github.cloak-preview+json" + }, + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { + required: true, + type: "string" + }, + sort: { + enum: ["author-date", "committer-date"], + type: "string" + } + }, + url: "/search/commits" + }, + issues: { + deprecated: "octokit.search.issues() has been renamed to octokit.search.issuesAndPullRequests() (2018-12-27)", + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { + required: true, + type: "string" + }, + sort: { + enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], + type: "string" + } + }, + url: "/search/issues" + }, + issuesAndPullRequests: { + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { + required: true, + type: "string" + }, + sort: { + enum: ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], + type: "string" + } + }, + url: "/search/issues" + }, + labels: { + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + q: { + required: true, + type: "string" + }, + repository_id: { + required: true, + type: "integer" + }, + sort: { + enum: ["created", "updated"], + type: "string" + } + }, + url: "/search/labels" + }, + repos: { + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { + required: true, + type: "string" + }, + sort: { + enum: ["stars", "forks", "help-wanted-issues", "updated"], + type: "string" + } + }, + url: "/search/repositories" + }, + topics: { + method: "GET", + params: { + q: { + required: true, + type: "string" + } + }, + url: "/search/topics" + }, + users: { + method: "GET", + params: { + order: { + enum: ["desc", "asc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + q: { + required: true, + type: "string" + }, + sort: { + enum: ["followers", "repositories", "joined"], + type: "string" + } + }, + url: "/search/users" + } + }, + teams: { + addMember: { + deprecated: "octokit.teams.addMember() has been renamed to octokit.teams.addMemberLegacy() (2020-01-16)", + method: "PUT", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/members/:username" + }, + addMemberLegacy: { + deprecated: "octokit.teams.addMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-team-member-legacy", + method: "PUT", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/members/:username" + }, + addOrUpdateMembership: { + deprecated: "octokit.teams.addOrUpdateMembership() has been renamed to octokit.teams.addOrUpdateMembershipLegacy() (2020-01-16)", + method: "PUT", + params: { + role: { + enum: ["member", "maintainer"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/memberships/:username" + }, + addOrUpdateMembershipInOrg: { + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + role: { + enum: ["member", "maintainer"], + type: "string" + }, + team_slug: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/memberships/:username" + }, + addOrUpdateMembershipLegacy: { + deprecated: "octokit.teams.addOrUpdateMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#add-or-update-team-membership-legacy", + method: "PUT", + params: { + role: { + enum: ["member", "maintainer"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/memberships/:username" + }, + addOrUpdateProject: { + deprecated: "octokit.teams.addOrUpdateProject() has been renamed to octokit.teams.addOrUpdateProjectLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", + params: { + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects/:project_id" + }, + addOrUpdateProjectInOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { + required: true, + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/projects/:project_id" + }, + addOrUpdateProjectLegacy: { + deprecated: "octokit.teams.addOrUpdateProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-project-legacy", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "PUT", + params: { + permission: { + enum: ["read", "write", "admin"], + type: "string" + }, + project_id: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects/:project_id" + }, + addOrUpdateRepo: { + deprecated: "octokit.teams.addOrUpdateRepo() has been renamed to octokit.teams.addOrUpdateRepoLegacy() (2020-01-16)", + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos/:owner/:repo" + }, + addOrUpdateRepoInOrg: { + method: "PUT", + params: { + org: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" + }, + addOrUpdateRepoLegacy: { + deprecated: "octokit.teams.addOrUpdateRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#add-or-update-team-repository-legacy", + method: "PUT", + params: { + owner: { + required: true, + type: "string" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos/:owner/:repo" + }, + checkManagesRepo: { + deprecated: "octokit.teams.checkManagesRepo() has been renamed to octokit.teams.checkManagesRepoLegacy() (2020-01-16)", + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos/:owner/:repo" + }, + checkManagesRepoInOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" + }, + checkManagesRepoLegacy: { + deprecated: "octokit.teams.checkManagesRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#check-if-a-team-manages-a-repository-legacy", + method: "GET", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos/:owner/:repo" + }, + create: { + method: "POST", + params: { + description: { + type: "string" + }, + maintainers: { + type: "string[]" + }, + name: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + }, + parent_team_id: { + type: "integer" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + repo_names: { + type: "string[]" + } + }, + url: "/orgs/:org/teams" + }, + createDiscussion: { + deprecated: "octokit.teams.createDiscussion() has been renamed to octokit.teams.createDiscussionLegacy() (2020-01-16)", + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + private: { + type: "boolean" + }, + team_id: { + required: true, + type: "integer" + }, + title: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/discussions" + }, + createDiscussionComment: { + deprecated: "octokit.teams.createDiscussionComment() has been renamed to octokit.teams.createDiscussionCommentLegacy() (2020-01-16)", + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments" + }, + createDiscussionCommentInOrg: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments" + }, + createDiscussionCommentLegacy: { + deprecated: "octokit.teams.createDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#create-a-comment-legacy", + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments" + }, + createDiscussionInOrg: { + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + }, + private: { + type: "boolean" + }, + team_slug: { + required: true, + type: "string" + }, + title: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions" + }, + createDiscussionLegacy: { + deprecated: "octokit.teams.createDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#create-a-discussion-legacy", + method: "POST", + params: { + body: { + required: true, + type: "string" + }, + private: { + type: "boolean" + }, + team_id: { + required: true, + type: "integer" + }, + title: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/discussions" + }, + delete: { + deprecated: "octokit.teams.delete() has been renamed to octokit.teams.deleteLegacy() (2020-01-16)", + method: "DELETE", + params: { + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" + }, + deleteDiscussion: { + deprecated: "octokit.teams.deleteDiscussion() has been renamed to octokit.teams.deleteDiscussionLegacy() (2020-01-16)", + method: "DELETE", + params: { + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + deleteDiscussionComment: { + deprecated: "octokit.teams.deleteDiscussionComment() has been renamed to octokit.teams.deleteDiscussionCommentLegacy() (2020-01-16)", + method: "DELETE", + params: { + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + deleteDiscussionCommentInOrg: { + method: "DELETE", + params: { + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + }, + deleteDiscussionCommentLegacy: { + deprecated: "octokit.teams.deleteDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#delete-a-comment-legacy", + method: "DELETE", + params: { + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + deleteDiscussionInOrg: { + method: "DELETE", + params: { + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + }, + deleteDiscussionLegacy: { + deprecated: "octokit.teams.deleteDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#delete-a-discussion-legacy", + method: "DELETE", + params: { + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + deleteInOrg: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug" + }, + deleteLegacy: { + deprecated: "octokit.teams.deleteLegacy() is deprecated, see https://developer.github.com/v3/teams/#delete-team-legacy", + method: "DELETE", + params: { + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" + }, + get: { + deprecated: "octokit.teams.get() has been renamed to octokit.teams.getLegacy() (2020-01-16)", + method: "GET", + params: { + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" + }, + getByName: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug" + }, + getDiscussion: { + deprecated: "octokit.teams.getDiscussion() has been renamed to octokit.teams.getDiscussionLegacy() (2020-01-16)", + method: "GET", + params: { + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + getDiscussionComment: { + deprecated: "octokit.teams.getDiscussionComment() has been renamed to octokit.teams.getDiscussionCommentLegacy() (2020-01-16)", + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + getDiscussionCommentInOrg: { + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + }, + getDiscussionCommentLegacy: { + deprecated: "octokit.teams.getDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#get-a-single-comment-legacy", + method: "GET", + params: { + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + getDiscussionInOrg: { + method: "GET", + params: { + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + }, + getDiscussionLegacy: { + deprecated: "octokit.teams.getDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#get-a-single-discussion-legacy", + method: "GET", + params: { + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + getLegacy: { + deprecated: "octokit.teams.getLegacy() is deprecated, see https://developer.github.com/v3/teams/#get-team-legacy", + method: "GET", + params: { + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" + }, + getMember: { + deprecated: "octokit.teams.getMember() has been renamed to octokit.teams.getMemberLegacy() (2020-01-16)", + method: "GET", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/members/:username" + }, + getMemberLegacy: { + deprecated: "octokit.teams.getMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-member-legacy", + method: "GET", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/members/:username" + }, + getMembership: { + deprecated: "octokit.teams.getMembership() has been renamed to octokit.teams.getMembershipLegacy() (2020-01-16)", + method: "GET", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/memberships/:username" + }, + getMembershipInOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/memberships/:username" + }, + getMembershipLegacy: { + deprecated: "octokit.teams.getMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#get-team-membership-legacy", + method: "GET", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/memberships/:username" + }, + list: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/orgs/:org/teams" + }, + listChild: { + deprecated: "octokit.teams.listChild() has been renamed to octokit.teams.listChildLegacy() (2020-01-16)", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/teams" + }, + listChildInOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/teams" + }, + listChildLegacy: { + deprecated: "octokit.teams.listChildLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-child-teams-legacy", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/teams" + }, + listDiscussionComments: { + deprecated: "octokit.teams.listDiscussionComments() has been renamed to octokit.teams.listDiscussionCommentsLegacy() (2020-01-16)", + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments" + }, + listDiscussionCommentsInOrg: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments" + }, + listDiscussionCommentsLegacy: { + deprecated: "octokit.teams.listDiscussionCommentsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#list-comments-legacy", + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments" + }, + listDiscussions: { + deprecated: "octokit.teams.listDiscussions() has been renamed to octokit.teams.listDiscussionsLegacy() (2020-01-16)", + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions" + }, + listDiscussionsInOrg: { + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions" + }, + listDiscussionsLegacy: { + deprecated: "octokit.teams.listDiscussionsLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#list-discussions-legacy", + method: "GET", + params: { + direction: { + enum: ["asc", "desc"], + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions" + }, + listForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/teams" + }, + listMembers: { + deprecated: "octokit.teams.listMembers() has been renamed to octokit.teams.listMembersLegacy() (2020-01-16)", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + role: { + enum: ["member", "maintainer", "all"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/members" + }, + listMembersInOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + role: { + enum: ["member", "maintainer", "all"], + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/members" + }, + listMembersLegacy: { + deprecated: "octokit.teams.listMembersLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-team-members-legacy", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + role: { + enum: ["member", "maintainer", "all"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/members" + }, + listPendingInvitations: { + deprecated: "octokit.teams.listPendingInvitations() has been renamed to octokit.teams.listPendingInvitationsLegacy() (2020-01-16)", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/invitations" + }, + listPendingInvitationsInOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/invitations" + }, + listPendingInvitationsLegacy: { + deprecated: "octokit.teams.listPendingInvitationsLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#list-pending-team-invitations-legacy", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/invitations" + }, + listProjects: { + deprecated: "octokit.teams.listProjects() has been renamed to octokit.teams.listProjectsLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects" + }, + listProjectsInOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/projects" + }, + listProjectsLegacy: { + deprecated: "octokit.teams.listProjectsLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-projects-legacy", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects" + }, + listRepos: { + deprecated: "octokit.teams.listRepos() has been renamed to octokit.teams.listReposLegacy() (2020-01-16)", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos" + }, + listReposInOrg: { + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/repos" + }, + listReposLegacy: { + deprecated: "octokit.teams.listReposLegacy() is deprecated, see https://developer.github.com/v3/teams/#list-team-repos-legacy", + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos" + }, + removeMember: { + deprecated: "octokit.teams.removeMember() has been renamed to octokit.teams.removeMemberLegacy() (2020-01-16)", + method: "DELETE", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/members/:username" + }, + removeMemberLegacy: { + deprecated: "octokit.teams.removeMemberLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-member-legacy", + method: "DELETE", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/members/:username" + }, + removeMembership: { + deprecated: "octokit.teams.removeMembership() has been renamed to octokit.teams.removeMembershipLegacy() (2020-01-16)", + method: "DELETE", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/memberships/:username" + }, + removeMembershipInOrg: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/memberships/:username" + }, + removeMembershipLegacy: { + deprecated: "octokit.teams.removeMembershipLegacy() is deprecated, see https://developer.github.com/v3/teams/members/#remove-team-membership-legacy", + method: "DELETE", + params: { + team_id: { + required: true, + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/teams/:team_id/memberships/:username" + }, + removeProject: { + deprecated: "octokit.teams.removeProject() has been renamed to octokit.teams.removeProjectLegacy() (2020-01-16)", + method: "DELETE", + params: { + project_id: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects/:project_id" + }, + removeProjectInOrg: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + project_id: { + required: true, + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/projects/:project_id" + }, + removeProjectLegacy: { + deprecated: "octokit.teams.removeProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-project-legacy", + method: "DELETE", + params: { + project_id: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects/:project_id" + }, + removeRepo: { + deprecated: "octokit.teams.removeRepo() has been renamed to octokit.teams.removeRepoLegacy() (2020-01-16)", + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos/:owner/:repo" + }, + removeRepoInOrg: { + method: "DELETE", + params: { + org: { + required: true, + type: "string" + }, + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/repos/:owner/:repo" + }, + removeRepoLegacy: { + deprecated: "octokit.teams.removeRepoLegacy() is deprecated, see https://developer.github.com/v3/teams/#remove-team-repository-legacy", + method: "DELETE", + params: { + owner: { + required: true, + type: "string" + }, + repo: { + required: true, + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/repos/:owner/:repo" + }, + reviewProject: { + deprecated: "octokit.teams.reviewProject() has been renamed to octokit.teams.reviewProjectLegacy() (2020-01-16)", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + project_id: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects/:project_id" + }, + reviewProjectInOrg: { + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + org: { + required: true, + type: "string" + }, + project_id: { + required: true, + type: "integer" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/projects/:project_id" + }, + reviewProjectLegacy: { + deprecated: "octokit.teams.reviewProjectLegacy() is deprecated, see https://developer.github.com/v3/teams/#review-a-team-project-legacy", + headers: { + accept: "application/vnd.github.inertia-preview+json" + }, + method: "GET", + params: { + project_id: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/projects/:project_id" + }, + update: { + deprecated: "octokit.teams.update() has been renamed to octokit.teams.updateLegacy() (2020-01-16)", + method: "PATCH", + params: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + parent_team_id: { + type: "integer" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" + }, + updateDiscussion: { + deprecated: "octokit.teams.updateDiscussion() has been renamed to octokit.teams.updateDiscussionLegacy() (2020-01-16)", + method: "PATCH", + params: { + body: { + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + }, + title: { + type: "string" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + updateDiscussionComment: { + deprecated: "octokit.teams.updateDiscussionComment() has been renamed to octokit.teams.updateDiscussionCommentLegacy() (2020-01-16)", + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + updateDiscussionCommentInOrg: { + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number/comments/:comment_number" + }, + updateDiscussionCommentLegacy: { + deprecated: "octokit.teams.updateDiscussionCommentLegacy() is deprecated, see https://developer.github.com/v3/teams/discussion_comments/#edit-a-comment-legacy", + method: "PATCH", + params: { + body: { + required: true, + type: "string" + }, + comment_number: { + required: true, + type: "integer" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id/discussions/:discussion_number/comments/:comment_number" + }, + updateDiscussionInOrg: { + method: "PATCH", + params: { + body: { + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + org: { + required: true, + type: "string" + }, + team_slug: { + required: true, + type: "string" + }, + title: { + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug/discussions/:discussion_number" + }, + updateDiscussionLegacy: { + deprecated: "octokit.teams.updateDiscussionLegacy() is deprecated, see https://developer.github.com/v3/teams/discussions/#edit-a-discussion-legacy", + method: "PATCH", + params: { + body: { + type: "string" + }, + discussion_number: { + required: true, + type: "integer" + }, + team_id: { + required: true, + type: "integer" + }, + title: { + type: "string" + } + }, + url: "/teams/:team_id/discussions/:discussion_number" + }, + updateInOrg: { + method: "PATCH", + params: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + org: { + required: true, + type: "string" + }, + parent_team_id: { + type: "integer" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + team_slug: { + required: true, + type: "string" + } + }, + url: "/orgs/:org/teams/:team_slug" + }, + updateLegacy: { + deprecated: "octokit.teams.updateLegacy() is deprecated, see https://developer.github.com/v3/teams/#edit-team-legacy", + method: "PATCH", + params: { + description: { + type: "string" + }, + name: { + required: true, + type: "string" + }, + parent_team_id: { + type: "integer" + }, + permission: { + enum: ["pull", "push", "admin"], + type: "string" + }, + privacy: { + enum: ["secret", "closed"], + type: "string" + }, + team_id: { + required: true, + type: "integer" + } + }, + url: "/teams/:team_id" + } + }, + users: { + addEmails: { + method: "POST", + params: { + emails: { + required: true, + type: "string[]" + } + }, + url: "/user/emails" + }, + block: { + method: "PUT", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/blocks/:username" + }, + checkBlocked: { + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/blocks/:username" + }, + checkFollowing: { + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/following/:username" + }, + checkFollowingForUser: { + method: "GET", + params: { + target_user: { + required: true, + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/following/:target_user" + }, + createGpgKey: { + method: "POST", + params: { + armored_public_key: { + type: "string" + } + }, + url: "/user/gpg_keys" + }, + createPublicKey: { + method: "POST", + params: { + key: { + type: "string" + }, + title: { + type: "string" + } + }, + url: "/user/keys" + }, + deleteEmails: { + method: "DELETE", + params: { + emails: { + required: true, + type: "string[]" + } + }, + url: "/user/emails" + }, + deleteGpgKey: { + method: "DELETE", + params: { + gpg_key_id: { + required: true, + type: "integer" + } + }, + url: "/user/gpg_keys/:gpg_key_id" + }, + deletePublicKey: { + method: "DELETE", + params: { + key_id: { + required: true, + type: "integer" + } + }, + url: "/user/keys/:key_id" + }, + follow: { + method: "PUT", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/following/:username" + }, + getAuthenticated: { + method: "GET", + params: {}, + url: "/user" + }, + getByUsername: { + method: "GET", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/users/:username" + }, + getContextForUser: { + method: "GET", + params: { + subject_id: { + type: "string" + }, + subject_type: { + enum: ["organization", "repository", "issue", "pull_request"], + type: "string" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/hovercard" + }, + getGpgKey: { + method: "GET", + params: { + gpg_key_id: { + required: true, + type: "integer" + } + }, + url: "/user/gpg_keys/:gpg_key_id" + }, + getPublicKey: { + method: "GET", + params: { + key_id: { + required: true, + type: "integer" + } + }, + url: "/user/keys/:key_id" + }, + list: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + since: { + type: "string" + } + }, + url: "/users" + }, + listBlocked: { + method: "GET", + params: {}, + url: "/user/blocks" + }, + listEmails: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/emails" + }, + listFollowersForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/followers" + }, + listFollowersForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/followers" + }, + listFollowingForAuthenticatedUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/following" + }, + listFollowingForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/following" + }, + listGpgKeys: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/gpg_keys" + }, + listGpgKeysForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/gpg_keys" + }, + listPublicEmails: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/public_emails" + }, + listPublicKeys: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + } + }, + url: "/user/keys" + }, + listPublicKeysForUser: { + method: "GET", + params: { + page: { + type: "integer" + }, + per_page: { + type: "integer" + }, + username: { + required: true, + type: "string" + } + }, + url: "/users/:username/keys" + }, + togglePrimaryEmailVisibility: { + method: "PATCH", + params: { + email: { + required: true, + type: "string" + }, + visibility: { + required: true, + type: "string" + } + }, + url: "/user/email/visibility" + }, + unblock: { + method: "DELETE", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/blocks/:username" + }, + unfollow: { + method: "DELETE", + params: { + username: { + required: true, + type: "string" + } + }, + url: "/user/following/:username" + }, + updateAuthenticated: { + method: "PATCH", + params: { + bio: { + type: "string" + }, + blog: { + type: "string" + }, + company: { + type: "string" + }, + email: { + type: "string" + }, + hireable: { + type: "boolean" + }, + location: { + type: "string" + }, + name: { + type: "string" + } + }, + url: "/user" + } + } +}; + +const VERSION = "2.4.0"; + +function registerEndpoints(octokit, routes) { + Object.keys(routes).forEach(namespaceName => { + if (!octokit[namespaceName]) { + octokit[namespaceName] = {}; + } + + Object.keys(routes[namespaceName]).forEach(apiName => { + const apiOptions = routes[namespaceName][apiName]; + const endpointDefaults = ["method", "url", "headers"].reduce((map, key) => { + if (typeof apiOptions[key] !== "undefined") { + map[key] = apiOptions[key]; + } + + return map; + }, {}); + endpointDefaults.request = { + validate: apiOptions.params + }; + let request = octokit.request.defaults(endpointDefaults); // patch request & endpoint methods to support deprecated parameters. + // Not the most elegant solution, but we don’t want to move deprecation + // logic into octokit/endpoint.js as it’s out of scope + + const hasDeprecatedParam = Object.keys(apiOptions.params || {}).find(key => apiOptions.params[key].deprecated); + + if (hasDeprecatedParam) { + const patch = patchForDeprecation.bind(null, octokit, apiOptions); + request = patch(octokit.request.defaults(endpointDefaults), `.${namespaceName}.${apiName}()`); + request.endpoint = patch(request.endpoint, `.${namespaceName}.${apiName}.endpoint()`); + request.endpoint.merge = patch(request.endpoint.merge, `.${namespaceName}.${apiName}.endpoint.merge()`); + } + + if (apiOptions.deprecated) { + octokit[namespaceName][apiName] = Object.assign(function deprecatedEndpointMethod() { + octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] ${apiOptions.deprecated}`)); + octokit[namespaceName][apiName] = request; + return request.apply(null, arguments); + }, request); + return; + } + + octokit[namespaceName][apiName] = request; + }); + }); +} + +function patchForDeprecation(octokit, apiOptions, method, methodName) { + const patchedMethod = options => { + options = Object.assign({}, options); + Object.keys(options).forEach(key => { + if (apiOptions.params[key] && apiOptions.params[key].deprecated) { + const aliasKey = apiOptions.params[key].alias; + octokit.log.warn(new deprecation.Deprecation(`[@octokit/rest] "${key}" parameter is deprecated for "${methodName}". Use "${aliasKey}" instead`)); + + if (!(aliasKey in options)) { + options[aliasKey] = options[key]; + } + + delete options[key]; + } + }); + return method(options); + }; + + Object.keys(method).forEach(key => { + patchedMethod[key] = method[key]; + }); + return patchedMethod; +} + +/** + * This plugin is a 1:1 copy of internal @octokit/rest plugins. The primary + * goal is to rebuild @octokit/rest on top of @octokit/core. Once that is + * done, we will remove the registerEndpoints methods and return the methods + * directly as with the other plugins. At that point we will also remove the + * legacy workarounds and deprecations. + * + * See the plan at + * https://github.com/octokit/plugin-rest-endpoint-methods.js/pull/1 + */ + +function restEndpointMethods(octokit) { + // @ts-ignore + octokit.registerEndpoints = registerEndpoints.bind(null, octokit); + registerEndpoints(octokit, endpointsByScope); // Aliasing scopes for backward compatibility + // See https://github.com/octokit/rest.js/pull/1134 + + [["gitdata", "git"], ["authorization", "oauthAuthorizations"], ["pullRequests", "pulls"]].forEach(([deprecatedScope, scope]) => { + Object.defineProperty(octokit, deprecatedScope, { + get() { + octokit.log.warn( // @ts-ignore + new deprecation.Deprecation(`[@octokit/plugin-rest-endpoint-methods] "octokit.${deprecatedScope}.*" methods are deprecated, use "octokit.${scope}.*" instead`)); // @ts-ignore + + return octokit[scope]; + } + + }); + }); + return {}; +} +restEndpointMethods.VERSION = VERSION; + +exports.restEndpointMethods = restEndpointMethods; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 363: +/***/ (function(module) { + +module.exports = function atob(str) { + return Buffer.from(str, 'base64').toString('binary') +} + + +/***/ }), + +/***/ 372: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticationBeforeRequest; + +const btoa = __webpack_require__(672); +const uniq = __webpack_require__(542); + +function authenticationBeforeRequest(state, options) { + if (!state.auth.type) { + return; + } + + if (state.auth.type === "basic") { + const hash = btoa(`${state.auth.username}:${state.auth.password}`); + options.headers.authorization = `Basic ${hash}`; + return; + } + + if (state.auth.type === "token") { + options.headers.authorization = `token ${state.auth.token}`; + return; + } + + if (state.auth.type === "app") { + options.headers.authorization = `Bearer ${state.auth.token}`; + const acceptHeaders = options.headers.accept + .split(",") + .concat("application/vnd.github.machine-man-preview+json"); + options.headers.accept = uniq(acceptHeaders) + .filter(Boolean) + .join(","); + return; + } + + options.url += options.url.indexOf("?") === -1 ? "?" : "&"; + + if (state.auth.token) { + options.url += `access_token=${encodeURIComponent(state.auth.token)}`; + return; + } + + const key = encodeURIComponent(state.auth.key); + const secret = encodeURIComponent(state.auth.secret); + options.url += `client_id=${key}&client_secret=${secret}`; +} + + +/***/ }), + +/***/ 384: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + + +const cp = __webpack_require__(129); +const parse = __webpack_require__(190); +const enoent = __webpack_require__(839); + +function spawn(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); + + // Spawn the child process + const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); + + // Hook into child process "exit" event to emit an error if the command + // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + enoent.hookChildProcess(spawned, parsed); + + return spawned; +} + +function spawnSync(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); + + // Spawn the child process + const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); + + // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); + + return result; +} + +module.exports = spawn; +module.exports.spawn = spawn; +module.exports.sync = spawnSync; + +module.exports._parse = parse; +module.exports._enoent = enoent; + + +/***/ }), + +/***/ 413: +/***/ (function(module, __unusedexports, __webpack_require__) { + +var fs = __webpack_require__(747) +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = __webpack_require__(253) +} else { + core = __webpack_require__(266) +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} + + +/***/ }), + +/***/ 424: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const url = __webpack_require__(835); +function getProxyUrl(reqUrl) { + let usingSsl = reqUrl.protocol === 'https:'; + let proxyUrl; + if (checkBypass(reqUrl)) { + return proxyUrl; + } + let proxyVar; + if (usingSsl) { + proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + if (proxyVar) { + proxyUrl = url.parse(proxyVar); + } + return proxyUrl; +} +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (let upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; + } + } + return false; +} +exports.checkBypass = checkBypass; + + +/***/ }), + +/***/ 438: +/***/ (function(module, __unusedexports, __webpack_require__) { + +const factory = __webpack_require__(904); + +module.exports = factory(); + + +/***/ }), + +/***/ 476: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var osName = _interopDefault(__webpack_require__(810)); + +function getUserAgent() { + try { + return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`; + } catch (error) { + if (/wmic os get Caption/.test(error.message)) { + return "Windows "; + } + + throw error; + } +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 478: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticationBeforeRequest; + +const btoa = __webpack_require__(672); + +const withAuthorizationPrefix = __webpack_require__(615); + +function authenticationBeforeRequest(state, options) { + if (typeof state.auth === "string") { + options.headers.authorization = withAuthorizationPrefix(state.auth); + return; + } + + if (state.auth.username) { + const hash = btoa(`${state.auth.username}:${state.auth.password}`); + options.headers.authorization = `Basic ${hash}`; + if (state.otp) { + options.headers["x-github-otp"] = state.otp; + } + return; + } + + if (state.auth.clientId) { + // There is a special case for OAuth applications, when `clientId` and `clientSecret` is passed as + // Basic Authorization instead of query parameters. The only routes where that applies share the same + // URL though: `/applications/:client_id/tokens/:access_token`. + // + // 1. [Check an authorization](https://developer.github.com/v3/oauth_authorizations/#check-an-authorization) + // 2. [Reset an authorization](https://developer.github.com/v3/oauth_authorizations/#reset-an-authorization) + // 3. [Revoke an authorization for an application](https://developer.github.com/v3/oauth_authorizations/#revoke-an-authorization-for-an-application) + // + // We identify by checking the URL. It must merge both "/applications/:client_id/tokens/:access_token" + // as well as "/applications/123/tokens/token456" + if (/\/applications\/:?[\w_]+\/tokens\/:?[\w_]+($|\?)/.test(options.url)) { + const hash = btoa(`${state.auth.clientId}:${state.auth.clientSecret}`); + options.headers.authorization = `Basic ${hash}`; + return; + } + + options.url += options.url.indexOf("?") === -1 ? "?" : "&"; + options.url += `client_id=${state.auth.clientId}&client_secret=${state.auth.clientSecret}`; + return; + } + + return Promise.resolve() + + .then(() => { + return state.auth(); + }) + + .then(authorization => { + options.headers.authorization = withAuthorizationPrefix(authorization); + }); +} + + +/***/ }), + +/***/ 479: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var deprecation = __webpack_require__(336); +var once = _interopDefault(__webpack_require__(678)); + +const logOnce = once(deprecation => console.warn(deprecation)); +/** + * Error with extra properties to help with debugging + */ + +class RequestError extends Error { + constructor(message, statusCode, options) { + super(message); // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + + this.name = "HttpError"; + this.status = statusCode; + Object.defineProperty(this, "code", { + get() { + logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); + return statusCode; + } + + }); + this.headers = options.headers || {}; // redact request credentials without mutating original request options + + const requestCopy = Object.assign({}, options.request); + + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") + }); + } + + requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit + // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications + .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended + // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header + .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } + +} + +exports.RequestError = RequestError; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 484: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = hasPreviousPage + +const deprecate = __webpack_require__(152) +const getPageLinks = __webpack_require__(251) + +function hasPreviousPage (link) { + deprecate(`octokit.hasPreviousPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).prev +} + + +/***/ }), + +/***/ 488: +/***/ (function(module) { + +"use strict"; + + +/*! + * isobject + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +function isObject(val) { + return val != null && typeof val === 'object' && Array.isArray(val) === false; +} + +/*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +function isObjectObject(o) { + return isObject(o) === true + && Object.prototype.toString.call(o) === '[object Object]'; +} + +function isPlainObject(o) { + var ctor,prot; + + if (isObjectObject(o) === false) return false; + + // If has modified constructor + ctor = o.constructor; + if (typeof ctor !== 'function') return false; + + // If has modified prototype + prot = ctor.prototype; + if (isObjectObject(prot) === false) return false; + + // If constructor does not have an Object-specific method + if (prot.hasOwnProperty('isPrototypeOf') === false) { + return false; + } + + // Most likely a plain Object + return true; +} + +module.exports = isPlainObject; + + +/***/ }), + +/***/ 503: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const path = __webpack_require__(622); +const childProcess = __webpack_require__(129); +const crossSpawn = __webpack_require__(384); +const stripEof = __webpack_require__(525); +const npmRunPath = __webpack_require__(86); +const isStream = __webpack_require__(898); +const _getStream = __webpack_require__(960); +const pFinally = __webpack_require__(812); +const onExit = __webpack_require__(962); +const errname = __webpack_require__(208); +const stdio = __webpack_require__(816); + +const TEN_MEGABYTES = 1000 * 1000 * 10; + +function handleArgs(cmd, args, opts) { + let parsed; + + opts = Object.assign({ + extendEnv: true, + env: {} + }, opts); + + if (opts.extendEnv) { + opts.env = Object.assign({}, process.env, opts.env); + } + + if (opts.__winShell === true) { + delete opts.__winShell; + parsed = { + command: cmd, + args, + options: opts, + file: cmd, + original: { + cmd, + args + } + }; + } else { + parsed = crossSpawn._parse(cmd, args, opts); + } + + opts = Object.assign({ + maxBuffer: TEN_MEGABYTES, + buffer: true, + stripEof: true, + preferLocal: true, + localDir: parsed.options.cwd || process.cwd(), + encoding: 'utf8', + reject: true, + cleanup: true + }, parsed.options); + + opts.stdio = stdio(opts); + + if (opts.preferLocal) { + opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir})); + } + + if (opts.detached) { + // #115 + opts.cleanup = false; + } + + if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') { + // #116 + parsed.args.unshift('/q'); + } + + return { + cmd: parsed.command, + args: parsed.args, + opts, + parsed + }; +} + +function handleInput(spawned, input) { + if (input === null || input === undefined) { + return; + } + + if (isStream(input)) { + input.pipe(spawned.stdin); + } else { + spawned.stdin.end(input); + } +} + +function handleOutput(opts, val) { + if (val && opts.stripEof) { + val = stripEof(val); + } + + return val; +} + +function handleShell(fn, cmd, opts) { + let file = '/bin/sh'; + let args = ['-c', cmd]; + + opts = Object.assign({}, opts); + + if (process.platform === 'win32') { + opts.__winShell = true; + file = process.env.comspec || 'cmd.exe'; + args = ['/s', '/c', `"${cmd}"`]; + opts.windowsVerbatimArguments = true; + } + + if (opts.shell) { + file = opts.shell; + delete opts.shell; + } + + return fn(file, args, opts); +} + +function getStream(process, stream, {encoding, buffer, maxBuffer}) { + if (!process[stream]) { + return null; + } + + let ret; + + if (!buffer) { + // TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10 + ret = new Promise((resolve, reject) => { + process[stream] + .once('end', resolve) + .once('error', reject); + }); + } else if (encoding) { + ret = _getStream(process[stream], { + encoding, + maxBuffer + }); + } else { + ret = _getStream.buffer(process[stream], {maxBuffer}); + } + + return ret.catch(err => { + err.stream = stream; + err.message = `${stream} ${err.message}`; + throw err; + }); +} + +function makeError(result, options) { + const {stdout, stderr} = result; + + let err = result.error; + const {code, signal} = result; + + const {parsed, joinedCmd} = options; + const timedOut = options.timedOut || false; + + if (!err) { + let output = ''; + + if (Array.isArray(parsed.opts.stdio)) { + if (parsed.opts.stdio[2] !== 'inherit') { + output += output.length > 0 ? stderr : `\n${stderr}`; + } + + if (parsed.opts.stdio[1] !== 'inherit') { + output += `\n${stdout}`; + } + } else if (parsed.opts.stdio !== 'inherit') { + output = `\n${stderr}${stdout}`; + } + + err = new Error(`Command failed: ${joinedCmd}${output}`); + err.code = code < 0 ? errname(code) : code; + } + + err.stdout = stdout; + err.stderr = stderr; + err.failed = true; + err.signal = signal || null; + err.cmd = joinedCmd; + err.timedOut = timedOut; + + return err; +} + +function joinCmd(cmd, args) { + let joinedCmd = cmd; + + if (Array.isArray(args) && args.length > 0) { + joinedCmd += ' ' + args.join(' '); + } + + return joinedCmd; +} + +module.exports = (cmd, args, opts) => { + const parsed = handleArgs(cmd, args, opts); + const {encoding, buffer, maxBuffer} = parsed.opts; + const joinedCmd = joinCmd(cmd, args); + + let spawned; + try { + spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts); + } catch (err) { + return Promise.reject(err); + } + + let removeExitHandler; + if (parsed.opts.cleanup) { + removeExitHandler = onExit(() => { + spawned.kill(); + }); + } + + let timeoutId = null; + let timedOut = false; + + const cleanup = () => { + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = null; + } + + if (removeExitHandler) { + removeExitHandler(); + } + }; + + if (parsed.opts.timeout > 0) { + timeoutId = setTimeout(() => { + timeoutId = null; + timedOut = true; + spawned.kill(parsed.opts.killSignal); + }, parsed.opts.timeout); + } + + const processDone = new Promise(resolve => { + spawned.on('exit', (code, signal) => { + cleanup(); + resolve({code, signal}); + }); + + spawned.on('error', err => { + cleanup(); + resolve({error: err}); + }); + + if (spawned.stdin) { + spawned.stdin.on('error', err => { + cleanup(); + resolve({error: err}); + }); + } + }); + + function destroy() { + if (spawned.stdout) { + spawned.stdout.destroy(); + } + + if (spawned.stderr) { + spawned.stderr.destroy(); + } + } + + const handlePromise = () => pFinally(Promise.all([ + processDone, + getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}), + getStream(spawned, 'stderr', {encoding, buffer, maxBuffer}) + ]).then(arr => { + const result = arr[0]; + result.stdout = arr[1]; + result.stderr = arr[2]; + + if (result.error || result.code !== 0 || result.signal !== null) { + const err = makeError(result, { + joinedCmd, + parsed, + timedOut + }); + + // TODO: missing some timeout logic for killed + // https://github.com/nodejs/node/blob/master/lib/child_process.js#L203 + // err.killed = spawned.killed || killed; + err.killed = err.killed || spawned.killed; + + if (!parsed.opts.reject) { + return err; + } + + throw err; + } + + return { + stdout: handleOutput(parsed.opts, result.stdout), + stderr: handleOutput(parsed.opts, result.stderr), + code: 0, + failed: false, + killed: false, + signal: null, + cmd: joinedCmd, + timedOut: false + }; + }), destroy); + + crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed); + + handleInput(spawned, parsed.opts.input); + + spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected); + spawned.catch = onrejected => handlePromise().catch(onrejected); + + return spawned; +}; + +// TODO: set `stderr: 'ignore'` when that option is implemented +module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout); + +// TODO: set `stdout: 'ignore'` when that option is implemented +module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr); + +module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts); + +module.exports.sync = (cmd, args, opts) => { + const parsed = handleArgs(cmd, args, opts); + const joinedCmd = joinCmd(cmd, args); + + if (isStream(parsed.opts.input)) { + throw new TypeError('The `input` option cannot be a stream in sync mode'); + } + + const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts); + result.code = result.status; + + if (result.error || result.status !== 0 || result.signal !== null) { + const err = makeError(result, { + joinedCmd, + parsed + }); + + if (!parsed.opts.reject) { + return err; + } + + throw err; + } + + return { + stdout: handleOutput(parsed.opts, result.stdout), + stderr: handleOutput(parsed.opts, result.stderr), + code: 0, + failed: false, + signal: null, + cmd: joinedCmd, + timedOut: false + }; +}; + +module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts); + + +/***/ }), + +/***/ 525: +/***/ (function(module) { + +"use strict"; + +module.exports = function (x) { + var lf = typeof x === 'string' ? '\n' : '\n'.charCodeAt(); + var cr = typeof x === 'string' ? '\r' : '\r'.charCodeAt(); + + if (x[x.length - 1] === lf) { + x = x.slice(0, x.length - 1); + } + + if (x[x.length - 1] === cr) { + x = x.slice(0, x.length - 1); + } + + return x; +}; + + +/***/ }), + +/***/ 534: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticationPlugin; + +const { createTokenAuth } = __webpack_require__(139); +const { Deprecation } = __webpack_require__(336); +const once = __webpack_require__(678); + +const beforeRequest = __webpack_require__(478); +const requestError = __webpack_require__(343); +const validate = __webpack_require__(173); +const withAuthorizationPrefix = __webpack_require__(615); + +const deprecateAuthBasic = once((log, deprecation) => log.warn(deprecation)); +const deprecateAuthObject = once((log, deprecation) => log.warn(deprecation)); + +function authenticationPlugin(octokit, options) { + // If `options.authStrategy` is set then use it and pass in `options.auth` + if (options.authStrategy) { + const auth = options.authStrategy(options.auth); + octokit.hook.wrap("request", auth.hook); + octokit.auth = auth; + return; + } + + // If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance + // is unauthenticated. The `octokit.auth()` method is a no-op and no request hook is registred. + if (!options.auth) { + octokit.auth = () => + Promise.resolve({ + type: "unauthenticated" + }); + return; + } + + const isBasicAuthString = + typeof options.auth === "string" && + /^basic/.test(withAuthorizationPrefix(options.auth)); + + // If only `options.auth` is set to a string, use the default token authentication strategy. + if (typeof options.auth === "string" && !isBasicAuthString) { + const auth = createTokenAuth(options.auth); + octokit.hook.wrap("request", auth.hook); + octokit.auth = auth; + return; + } + + // Otherwise log a deprecation message + const [deprecationMethod, deprecationMessapge] = isBasicAuthString + ? [ + deprecateAuthBasic, + 'Setting the "new Octokit({ auth })" option to a Basic Auth string is deprecated. Use https://github.com/octokit/auth-basic.js instead. See (https://octokit.github.io/rest.js/#authentication)' + ] + : [ + deprecateAuthObject, + 'Setting the "new Octokit({ auth })" option to an object without also setting the "authStrategy" option is deprecated and will be removed in v17. See (https://octokit.github.io/rest.js/#authentication)' + ]; + deprecationMethod( + octokit.log, + new Deprecation("[@octokit/rest] " + deprecationMessapge) + ); + + octokit.auth = () => + Promise.resolve({ + type: "deprecated", + message: deprecationMessapge + }); + + validate(options.auth); + + const state = { + octokit, + auth: options.auth + }; + + octokit.hook.before("request", beforeRequest.bind(null, state)); + octokit.hook.error("request", requestError.bind(null, state)); +} + + +/***/ }), + +/***/ 542: +/***/ (function(module) { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array ? array.length : 0; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array ? array.length : 0; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return baseFindIndex(array, baseIsNaN, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * Checks if a cache value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + Set = getNative(root, 'Set'), + nativeCreate = getNative(Object, 'create'); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ +function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; +} + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); +}; + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each + * element is kept. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ +function uniq(array) { + return (array && array.length) + ? baseUniq(array) + : []; +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +module.exports = uniq; + + +/***/ }), + +/***/ 552: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + + +const fs = __webpack_require__(747); +const shebangCommand = __webpack_require__(851); + +function readShebang(command) { + // Read the first 150 bytes from the file + const size = 150; + let buffer; + + if (Buffer.alloc) { + // Node.js v4.5+ / v5.10+ + buffer = Buffer.alloc(size); + } else { + // Old Node.js API + buffer = new Buffer(size); + buffer.fill(0); // zero-fill + } + + let fd; + + try { + fd = fs.openSync(command, 'r'); + fs.readSync(fd, buffer, 0, size, 0); + fs.closeSync(fd); + } catch (e) { /* Empty */ } + + // Attempt to extract shebang (null is returned if not a shebang) + return shebangCommand(buffer.toString()); +} + +module.exports = readShebang; + + +/***/ }), + +/***/ 573: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = hasNextPage + +const deprecate = __webpack_require__(152) +const getPageLinks = __webpack_require__(251) + +function hasNextPage (link) { + deprecate(`octokit.hasNextPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).next +} + + +/***/ }), + +/***/ 574: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticate; + +const { Deprecation } = __webpack_require__(336); +const once = __webpack_require__(678); + +const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation)); + +function authenticate(state, options) { + deprecateAuthenticate( + state.octokit.log, + new Deprecation( + '[@octokit/rest] octokit.authenticate() is deprecated. Use "auth" constructor option instead.' + ) + ); + + if (!options) { + state.auth = false; + return; + } + + switch (options.type) { + case "basic": + if (!options.username || !options.password) { + throw new Error( + "Basic authentication requires both a username and password to be set" + ); + } + break; + + case "oauth": + if (!options.token && !(options.key && options.secret)) { + throw new Error( + "OAuth2 authentication requires a token or key & secret to be set" + ); + } + break; + + case "token": + case "app": + if (!options.token) { + throw new Error("Token authentication requires a token to be set"); + } + break; + + default: + throw new Error( + "Invalid authentication type, must be 'basic', 'oauth', 'token' or 'app'" + ); + } + + state.auth = options; +} + + +/***/ }), + +/***/ 586: +/***/ (function(module) { + +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), + +/***/ 589: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = getNextPage + +const getPage = __webpack_require__(242) + +function getNextPage (octokit, link, headers) { + return getPage(octokit, link, 'next', headers) +} + + +/***/ }), + +/***/ 605: +/***/ (function(module) { + +module.exports = require("http"); + +/***/ }), + +/***/ 610: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = octokitValidate; + +const validate = __webpack_require__(93); + +function octokitValidate(octokit) { + octokit.hook.before("request", validate.bind(null, octokit)); +} + + +/***/ }), + +/***/ 614: +/***/ (function(module) { + +module.exports = require("events"); + +/***/ }), + +/***/ 615: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = withAuthorizationPrefix; + +const atob = __webpack_require__(363); + +const REGEX_IS_BASIC_AUTH = /^[\w-]+:/; + +function withAuthorizationPrefix(authorization) { + if (/^(basic|bearer|token) /i.test(authorization)) { + return authorization; + } + + try { + if (REGEX_IS_BASIC_AUTH.test(atob(authorization))) { + return `basic ${authorization}`; + } + } catch (error) {} + + if (authorization.split(/\./).length === 3) { + return `bearer ${authorization}`; + } + + return `token ${authorization}`; +} + + +/***/ }), + +/***/ 621: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const {PassThrough} = __webpack_require__(794); + +module.exports = options => { + options = Object.assign({}, options); + + const {array} = options; + let {encoding} = options; + const buffer = encoding === 'buffer'; + let objectMode = false; + + if (array) { + objectMode = !(encoding || buffer); + } else { + encoding = encoding || 'utf8'; + } + + if (buffer) { + encoding = null; + } + + let len = 0; + const ret = []; + const stream = new PassThrough({objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + stream.on('data', chunk => { + ret.push(chunk); + + if (objectMode) { + len = ret.length; + } else { + len += chunk.length; + } + }); + + stream.getBufferedValue = () => { + if (array) { + return ret; + } + + return buffer ? Buffer.concat(ret, len) : ret.join(''); + }; + + stream.getBufferedLength = () => len; + + return stream; +}; + + +/***/ }), + +/***/ 622: +/***/ (function(module) { + +module.exports = require("path"); + +/***/ }), + +/***/ 624: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __webpack_require__(747); +const os_1 = __webpack_require__(87); +class Context { + /** + * Hydrate the context from the environment + */ + constructor() { + this.payload = {}; + if (process.env.GITHUB_EVENT_PATH) { + if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) { + this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); + } + else { + const path = process.env.GITHUB_EVENT_PATH; + process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); + } + } + this.eventName = process.env.GITHUB_EVENT_NAME; + this.sha = process.env.GITHUB_SHA; + this.ref = process.env.GITHUB_REF; + this.workflow = process.env.GITHUB_WORKFLOW; + this.action = process.env.GITHUB_ACTION; + this.actor = process.env.GITHUB_ACTOR; + } + get issue() { + const payload = this.payload; + return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); + } + get repo() { + if (process.env.GITHUB_REPOSITORY) { + const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); + return { owner, repo }; + } + if (this.payload.repository) { + return { + owner: this.payload.repository.owner.login, + repo: this.payload.repository.name + }; + } + throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); + } +} +exports.Context = Context; +//# sourceMappingURL=context.js.map + +/***/ }), + +/***/ 625: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = authenticationPlugin; + +const { Deprecation } = __webpack_require__(336); +const once = __webpack_require__(678); + +const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation)); + +const authenticate = __webpack_require__(574); +const beforeRequest = __webpack_require__(372); +const requestError = __webpack_require__(210); + +function authenticationPlugin(octokit, options) { + if (options.auth) { + octokit.authenticate = () => { + deprecateAuthenticate( + octokit.log, + new Deprecation( + '[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor' + ) + ); + }; + return; + } + const state = { + octokit, + auth: false + }; + octokit.authenticate = authenticate.bind(null, state); + octokit.hook.before("request", beforeRequest.bind(null, state)); + octokit.hook.error("request", requestError.bind(null, state)); +} + + +/***/ }), + +/***/ 627: +/***/ (function(module, __unusedexports, __webpack_require__) { + +var register = __webpack_require__(881) +var addHook = __webpack_require__(891) +var removeHook = __webpack_require__(17) + +// bind with array of arguments: https://stackoverflow.com/a/21792913 +var bind = Function.bind +var bindable = bind.bind(bind) + +function bindApi (hook, state, name) { + var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state]) + hook.api = { remove: removeHookRef } + hook.remove = removeHookRef + + ;['before', 'error', 'after', 'wrap'].forEach(function (kind) { + var args = name ? [state, kind, name] : [state, kind] + hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args) + }) +} + +function HookSingular () { + var singularHookName = 'h' + var singularHookState = { + registry: {} + } + var singularHook = register.bind(null, singularHookState, singularHookName) + bindApi(singularHook, singularHookState, singularHookName) + return singularHook +} + +function HookCollection () { + var state = { + registry: {} + } + + var hook = register.bind(null, state) + bindApi(hook, state) + + return hook +} + +var collectionHookDeprecationMessageDisplayed = false +function Hook () { + if (!collectionHookDeprecationMessageDisplayed) { + console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4') + collectionHookDeprecationMessageDisplayed = true + } + return HookCollection() +} + +Hook.Singular = HookSingular.bind() +Hook.Collection = HookCollection.bind() + +module.exports = Hook +// expose constructors as a named property for TypeScript +module.exports.Hook = Hook +module.exports.Singular = Hook.Singular +module.exports.Collection = Hook.Collection + + +/***/ }), + +/***/ 631: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +var request = __webpack_require__(979); +var universalUserAgent = __webpack_require__(476); + +const VERSION = "4.3.1"; + +class GraphqlError extends Error { + constructor(request, response) { + const message = response.data.errors[0].message; + super(message); + Object.assign(this, response.data); + this.name = "GraphqlError"; + this.request = request; // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + +} + +const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query"]; +function graphql(request, query, options) { + options = typeof query === "string" ? options = Object.assign({ + query + }, options) : options = query; + const requestOptions = Object.keys(options).reduce((result, key) => { + if (NON_VARIABLE_OPTIONS.includes(key)) { + result[key] = options[key]; + return result; + } + + if (!result.variables) { + result.variables = {}; + } + + result.variables[key] = options[key]; + return result; + }, {}); + return request(requestOptions).then(response => { + if (response.data.errors) { + throw new GraphqlError(requestOptions, { + data: response.data + }); + } + + return response.data.data; + }); +} + +function withDefaults(request$1, newDefaults) { + const newRequest = request$1.defaults(newDefaults); + + const newApi = (query, options) => { + return graphql(newRequest, query, options); + }; + + return Object.assign(newApi, { + defaults: withDefaults.bind(null, newRequest), + endpoint: request.request.endpoint + }); +} + +const graphql$1 = withDefaults(request.request, { + headers: { + "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` + }, + method: "POST", + url: "/graphql" +}); +function withCustomRequest(customRequest) { + return withDefaults(customRequest, { + method: "POST", + url: "/graphql" + }); +} + +exports.graphql = graphql$1; +exports.withCustomRequest = withCustomRequest; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 658: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = paginationMethodsPlugin + +function paginationMethodsPlugin (octokit) { + octokit.getFirstPage = __webpack_require__(855).bind(null, octokit) + octokit.getLastPage = __webpack_require__(94).bind(null, octokit) + octokit.getNextPage = __webpack_require__(589).bind(null, octokit) + octokit.getPreviousPage = __webpack_require__(27).bind(null, octokit) + octokit.hasFirstPage = __webpack_require__(803) + octokit.hasLastPage = __webpack_require__(759) + octokit.hasNextPage = __webpack_require__(573) + octokit.hasPreviousPage = __webpack_require__(484) +} + + +/***/ }), + +/***/ 663: +/***/ (function(module) { + +module.exports = class HttpError extends Error { + constructor (message, code, headers) { + super(message) + + // Maintains proper stack trace (only available on V8) + /* istanbul ignore next */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor) + } + + this.name = 'HttpError' + this.code = code + this.headers = headers + } +} + + +/***/ }), + +/***/ 665: +/***/ (function(module) { + +// This is not the set of all possible signals. +// +// It IS, however, the set of all signals that trigger +// an exit on either Linux or BSD systems. Linux is a +// superset of the signal names supported on BSD, and +// the unknown signals just fail to register, so we can +// catch that easily enough. +// +// Don't bother with SIGKILL. It's uncatchable, which +// means that we can't fire any callbacks anyway. +// +// If a user does happen to register a handler on a non- +// fatal signal like SIGWINCH or something, and then +// exit, it'll end up firing `process.emit('exit')`, so +// the handler will be fired anyway. +// +// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised +// artificially, inherently leave the process in a +// state from which it is not safe to try and enter JS +// listeners. +module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' +] + +if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ) +} + +if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ) +} + + +/***/ }), + +/***/ 669: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const os = __importStar(__webpack_require__(87)); +/** + * Commands + * + * Command Format: + * ::name key=value,key=value::message + * + * Examples: + * ::warning::This is the message + * ::set-env name=MY_VAR::some value + */ +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +exports.issueCommand = issueCommand; +function issue(name, message = '') { + issueCommand(name, {}, message); +} +exports.issue = issue; +const CMD_STRING = '::'; +class Command { + constructor(command, properties, message) { + if (!command) { + command = 'missing.command'; + } + this.command = command; + this.properties = properties; + this.message = message; + } + toString() { + let cmdStr = CMD_STRING + this.command; + if (this.properties && Object.keys(this.properties).length > 0) { + cmdStr += ' '; + let first = true; + for (const key in this.properties) { + if (this.properties.hasOwnProperty(key)) { + const val = this.properties[key]; + if (val) { + if (first) { + first = false; + } + else { + cmdStr += ','; + } + cmdStr += `${key}=${escapeProperty(val)}`; + } + } + } + } + cmdStr += `${CMD_STRING}${escapeData(this.message)}`; + return cmdStr; + } +} +/** + * Sanitizes an input into a string so it can be passed into issueCommand safely + * @param input input to sanitize into a string + */ +function toCommandValue(input) { + if (input === null || input === undefined) { + return ''; + } + else if (typeof input === 'string' || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +exports.toCommandValue = toCommandValue; +function escapeData(s) { + return toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A'); +} +function escapeProperty(s) { + return toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A') + .replace(/:/g, '%3A') + .replace(/,/g, '%2C'); +} +//# sourceMappingURL=command.js.map + +/***/ }), + +/***/ 672: +/***/ (function(module) { + +module.exports = function btoa(str) { + return new Buffer(str).toString('base64') +} + + +/***/ }), + +/***/ 675: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const url = __webpack_require__(835); +const http = __webpack_require__(605); +const https = __webpack_require__(211); +const pm = __webpack_require__(424); +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +/** + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ +function getProxyUrl(serverUrl) { + let proxyUrl = pm.getProxyUrl(url.parse(serverUrl)); + return proxyUrl ? proxyUrl.href : ''; +} +exports.getProxyUrl = getProxyUrl; +const HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +const HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientResponse { + constructor(message) { + this.message = message; + } + readBody() { + return new Promise(async (resolve, reject) => { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + }); + } +} +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let parsedUrl = url.parse(requestUrl); + return parsedUrl.protocol === 'https:'; +} +exports.isHttps = isHttps; +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + } + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + } + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + } + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + } + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + } + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + } + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + async getJson(requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + let res = await this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async postJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async putJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async patchJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + async request(verb, requestUrl, data, headers) { + if (this._disposed) { + throw new Error('Client has already been disposed.'); + } + let parsedUrl = url.parse(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = await this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = url.parse(redirectUrl); + if (parsedUrl.protocol == 'https:' && + parsedUrl.protocol != parsedRedirectUrl.protocol && + !this._allowRedirectDowngrade) { + throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + await response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (let header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = await this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + await response.readBody(); + await this._performExponentialBackoff(numTries); + } + } + return response; + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof data === 'string') { + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); + } + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + let parsedUrl = url.parse(serverUrl); + return this._getAgent(parsedUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + this.handlers.forEach(handler => { + handler.prepareRequest(info.options); + }); + } + return info; + } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); + } + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; + } + return additionalHeaders[header] || clientHeader || _default; + } + _getAgent(parsedUrl) { + let agent; + let proxyUrl = pm.getProxyUrl(parsedUrl); + let useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = __webpack_require__(187); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + proxyAuth: proxyUrl.auth, + host: proxyUrl.hostname, + port: proxyUrl.port + } + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; + } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + async _processResponse(res, options) { + return new Promise(async (resolve, reject) => { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = await res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = 'Failed request: (' + statusCode + ')'; + } + let err = new Error(msg); + // attach statusCode and body obj (if available) to the error object + err['statusCode'] = statusCode; + if (response.result) { + err['result'] = response.result; + } + reject(err); + } + else { + resolve(response); + } + }); + } +} +exports.HttpClient = HttpClient; + + +/***/ }), + +/***/ 676: +/***/ (function(module) { + +module.exports = {"name":"@octokit/rest","version":"16.43.1","publishConfig":{"access":"public"},"description":"GitHub REST API client for Node.js","keywords":["octokit","github","rest","api-client"],"author":"Gregor Martynus (https://github.com/gr2m)","contributors":[{"name":"Mike de Boer","email":"info@mikedeboer.nl"},{"name":"Fabian Jakobs","email":"fabian@c9.io"},{"name":"Joe Gallo","email":"joe@brassafrax.com"},{"name":"Gregor Martynus","url":"https://github.com/gr2m"}],"repository":"https://github.com/octokit/rest.js","dependencies":{"@octokit/auth-token":"^2.4.0","@octokit/plugin-paginate-rest":"^1.1.1","@octokit/plugin-request-log":"^1.0.0","@octokit/plugin-rest-endpoint-methods":"2.4.0","@octokit/request":"^5.2.0","@octokit/request-error":"^1.0.2","atob-lite":"^2.0.0","before-after-hook":"^2.0.0","btoa-lite":"^1.0.0","deprecation":"^2.0.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.uniq":"^4.5.0","octokit-pagination-methods":"^1.1.0","once":"^1.4.0","universal-user-agent":"^4.0.0"},"devDependencies":{"@gimenete/type-writer":"^0.1.3","@octokit/auth":"^1.1.1","@octokit/fixtures-server":"^5.0.6","@octokit/graphql":"^4.2.0","@types/node":"^13.1.0","bundlesize":"^0.18.0","chai":"^4.1.2","compression-webpack-plugin":"^3.1.0","cypress":"^3.0.0","glob":"^7.1.2","http-proxy-agent":"^4.0.0","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.1","lodash.upperfirst":"^4.3.1","lolex":"^5.1.2","mkdirp":"^1.0.0","mocha":"^7.0.1","mustache":"^4.0.0","nock":"^11.3.3","npm-run-all":"^4.1.2","nyc":"^15.0.0","prettier":"^1.14.2","proxy":"^1.0.0","semantic-release":"^17.0.0","sinon":"^8.0.0","sinon-chai":"^3.0.0","sort-keys":"^4.0.0","string-to-arraybuffer":"^1.0.0","string-to-jsdoc-comment":"^1.0.0","typescript":"^3.3.1","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.0.0","webpack-cli":"^3.0.0"},"types":"index.d.ts","scripts":{"coverage":"nyc report --reporter=html && open coverage/index.html","lint":"prettier --check '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","lint:fix":"prettier --write '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","pretest":"npm run -s lint","test":"nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"","test:browser":"cypress run --browser chrome","build":"npm-run-all build:*","build:ts":"npm run -s update-endpoints:typescript","prebuild:browser":"mkdirp dist/","build:browser":"npm-run-all build:browser:*","build:browser:development":"webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json","build:browser:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map","generate-bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","update-endpoints":"npm-run-all update-endpoints:*","update-endpoints:fetch-json":"node scripts/update-endpoints/fetch-json","update-endpoints:typescript":"node scripts/update-endpoints/typescript","prevalidate:ts":"npm run -s build:ts","validate:ts":"tsc --target es6 --noImplicitAny index.d.ts","postvalidate:ts":"tsc --noEmit --target es6 test/typescript-validate.ts","start-fixtures-server":"octokit-fixtures-server"},"license":"MIT","files":["index.js","index.d.ts","lib","plugins"],"nyc":{"ignore":["test"]},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"bundlesize":[{"path":"./dist/octokit-rest.min.js.gz","maxSize":"33 kB"}]}; + +/***/ }), + +/***/ 678: +/***/ (function(module, __unusedexports, __webpack_require__) { + +var wrappy = __webpack_require__(333) +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) + + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) + } + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f +} + + +/***/ }), + +/***/ 704: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const os = __webpack_require__(87); +const execa = __webpack_require__(503); + +// Reference: https://www.gaijin.at/en/lstwinver.php +const names = new Map([ + ['10.0', '10'], + ['6.3', '8.1'], + ['6.2', '8'], + ['6.1', '7'], + ['6.0', 'Vista'], + ['5.2', 'Server 2003'], + ['5.1', 'XP'], + ['5.0', '2000'], + ['4.9', 'ME'], + ['4.1', '98'], + ['4.0', '95'] +]); + +const windowsRelease = release => { + const version = /\d+\.\d/.exec(release || os.release()); + + if (release && !version) { + throw new Error('`release` argument doesn\'t match `n.n`'); + } + + const ver = (version || [])[0]; + + // Server 2008, 2012, 2016, and 2019 versions are ambiguous with desktop versions and must be detected at runtime. + // If `release` is omitted or we're on a Windows system, and the version number is an ambiguous version + // then use `wmic` to get the OS caption: https://msdn.microsoft.com/en-us/library/aa394531(v=vs.85).aspx + // If `wmic` is obsoloete (later versions of Windows 10), use PowerShell instead. + // If the resulting caption contains the year 2008, 2012, 2016 or 2019, it is a server version, so return a server OS name. + if ((!release || release === os.release()) && ['6.1', '6.2', '6.3', '10.0'].includes(ver)) { + let stdout; + try { + stdout = execa.sync('powershell', ['(Get-CimInstance -ClassName Win32_OperatingSystem).caption']).stdout || ''; + } catch (_) { + stdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || ''; + } + + const year = (stdout.match(/2008|2012|2016|2019/) || [])[0]; + + if (year) { + return `Server ${year}`; + } + } + + return names.get(ver); +}; + +module.exports = windowsRelease; + + +/***/ }), + +/***/ 718: +/***/ (function(module, __unusedexports, __webpack_require__) { + +var once = __webpack_require__(678); + +var noop = function() {}; + +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; + +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; + +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + + callback = once(callback || noop); + + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + var cancelled = false; + + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; + + var onfinish = function() { + writable = false; + if (!readable) callback.call(stream); + }; + + var onend = function() { + readable = false; + if (!writable) callback.call(stream); + }; + + var onexit = function(exitCode) { + callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; + + var onerror = function(err) { + callback.call(stream, err); + }; + + var onclose = function() { + process.nextTick(onclosenexttick); + }; + + var onclosenexttick = function() { + if (cancelled) return; + if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); + if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); + }; + + var onrequest = function() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + + if (isChildProcess(stream)) stream.on('exit', onexit); + + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + + return function() { + cancelled = true; + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +}; + +module.exports = eos; + + +/***/ }), + +/***/ 725: +/***/ (function(module) { + +"use strict"; + + +/** + * Tries to execute a function and discards any error that occurs. + * @param {Function} fn - Function that might or might not throw an error. + * @returns {?*} Return-value of the function when no error occurred. + */ +module.exports = function(fn) { + + try { return fn() } catch (e) {} + +} + +/***/ }), + +/***/ 727: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const command_1 = __webpack_require__(669); +const os = __importStar(__webpack_require__(87)); +const path = __importStar(__webpack_require__(622)); +/** + * The code to exit an action + */ +var ExitCode; +(function (ExitCode) { + /** + * A code indicating that the action was successful + */ + ExitCode[ExitCode["Success"] = 0] = "Success"; + /** + * A code indicating that the action was a failure + */ + ExitCode[ExitCode["Failure"] = 1] = "Failure"; +})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); +//----------------------------------------------------------------------- +// Variables +//----------------------------------------------------------------------- +/** + * Sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function exportVariable(name, val) { + const convertedVal = command_1.toCommandValue(val); + process.env[name] = convertedVal; + command_1.issueCommand('set-env', { name }, convertedVal); +} +exports.exportVariable = exportVariable; +/** + * Registers a secret which will get masked from logs + * @param secret value of the secret + */ +function setSecret(secret) { + command_1.issueCommand('add-mask', {}, secret); +} +exports.setSecret = setSecret; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +function addPath(inputPath) { + command_1.issueCommand('add-path', {}, inputPath); + process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; +} +exports.addPath = addPath; +/** + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string + */ +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + return val.trim(); +} +exports.getInput = getInput; +/** + * Sets the value of an output. + * + * @param name name of the output to set + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function setOutput(name, value) { + command_1.issueCommand('set-output', { name }, value); +} +exports.setOutput = setOutput; +/** + * Enables or disables the echoing of commands into stdout for the rest of the step. + * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. + * + */ +function setCommandEcho(enabled) { + command_1.issue('echo', enabled ? 'on' : 'off'); +} +exports.setCommandEcho = setCommandEcho; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- +/** + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- +/** + * Gets whether Actions Step Debug is on or not + */ +function isDebug() { + return process.env['RUNNER_DEBUG'] === '1'; +} +exports.isDebug = isDebug; +/** + * Writes debug message to user log + * @param message debug message + */ +function debug(message) { + command_1.issueCommand('debug', {}, message); +} +exports.debug = debug; +/** + * Adds an error issue + * @param message error issue message. Errors will be converted to string via toString() + */ +function error(message) { + command_1.issue('error', message instanceof Error ? message.toString() : message); +} +exports.error = error; +/** + * Adds an warning issue + * @param message warning issue message. Errors will be converted to string via toString() + */ +function warning(message) { + command_1.issue('warning', message instanceof Error ? message.toString() : message); +} +exports.warning = warning; +/** + * Writes info to log with console.log. + * @param message info message + */ +function info(message) { + process.stdout.write(message + os.EOL); +} +exports.info = info; +/** + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group + */ +function startGroup(name) { + command_1.issue('group', name); +} +exports.startGroup = startGroup; +/** + * End an output group. + */ +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; +/** + * Wrap an asynchronous function call in a group. + * + * Returns the same type as the function itself. + * + * @param name The name of the group + * @param fn The function to wrap in the group + */ +function group(name, fn) { + return __awaiter(this, void 0, void 0, function* () { + startGroup(name); + let result; + try { + result = yield fn(); + } + finally { + endGroup(); + } + return result; + }); +} +exports.group = group; +//----------------------------------------------------------------------- +// Wrapper action state +//----------------------------------------------------------------------- +/** + * Saves state for current action, the state can only be retrieved by this action's post job execution. + * + * @param name name of the state to store + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function saveState(name, value) { + command_1.issueCommand('save-state', { name }, value); +} +exports.saveState = saveState; +/** + * Gets the value of an state set by this action's main execution. + * + * @param name name of the state to get + * @returns string + */ +function getState(name) { + return process.env[`STATE_${name}`] || ''; +} +exports.getState = getState; +//# sourceMappingURL=core.js.map + +/***/ }), + +/***/ 744: +/***/ (function(module) { + +"use strict"; + +module.exports = opts => { + opts = opts || {}; + + const env = opts.env || process.env; + const platform = opts.platform || process.platform; + + if (platform !== 'win32') { + return 'PATH'; + } + + return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path'; +}; + + +/***/ }), + +/***/ 747: +/***/ (function(module) { + +module.exports = require("fs"); + +/***/ }), + +/***/ 754: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var deprecation = __webpack_require__(336); +var once = _interopDefault(__webpack_require__(678)); + +const logOnce = once(deprecation => console.warn(deprecation)); +/** + * Error with extra properties to help with debugging + */ + +class RequestError extends Error { + constructor(message, statusCode, options) { + super(message); // Maintains proper stack trace (only available on V8) + + /* istanbul ignore next */ + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + + this.name = "HttpError"; + this.status = statusCode; + Object.defineProperty(this, "code", { + get() { + logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); + return statusCode; + } + + }); + this.headers = options.headers || {}; // redact request credentials without mutating original request options + + const requestCopy = Object.assign({}, options.request); + + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") + }); + } + + requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit + // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications + .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended + // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header + .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); + this.request = requestCopy; + } + +} + +exports.RequestError = RequestError; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 759: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = hasLastPage + +const deprecate = __webpack_require__(152) +const getPageLinks = __webpack_require__(251) + +function hasLastPage (link) { + deprecate(`octokit.hasLastPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).last +} + + +/***/ }), + +/***/ 761: +/***/ (function(module) { + +module.exports = require("zlib"); + +/***/ }), + +/***/ 794: +/***/ (function(module) { + +module.exports = require("stream"); + +/***/ }), + +/***/ 803: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = hasFirstPage + +const deprecate = __webpack_require__(152) +const getPageLinks = __webpack_require__(251) + +function hasFirstPage (link) { + deprecate(`octokit.hasFirstPage() – You can use octokit.paginate or async iterators instead: https://github.com/octokit/rest.js#pagination.`) + return getPageLinks(link).first +} + + +/***/ }), + +/***/ 808: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var osName = _interopDefault(__webpack_require__(810)); + +function getUserAgent() { + try { + return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`; + } catch (error) { + if (/wmic os get Caption/.test(error.message)) { + return "Windows "; + } + + return ""; + } +} + +exports.getUserAgent = getUserAgent; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 810: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const os = __webpack_require__(87); +const macosRelease = __webpack_require__(290); +const winRelease = __webpack_require__(704); + +const osName = (platform, release) => { + if (!platform && release) { + throw new Error('You can\'t specify a `release` without specifying `platform`'); + } + + platform = platform || os.platform(); + + let id; + + if (platform === 'darwin') { + if (!release && os.platform() === 'darwin') { + release = os.release(); + } + + const prefix = release ? (Number(release.split('.')[0]) > 15 ? 'macOS' : 'OS X') : 'macOS'; + id = release ? macosRelease(release).name : ''; + return prefix + (id ? ' ' + id : ''); + } + + if (platform === 'linux') { + if (!release && os.platform() === 'linux') { + release = os.release(); + } + + id = release ? release.replace(/^(\d+\.\d+).*/, '$1') : ''; + return 'Linux' + (id ? ' ' + id : ''); + } + + if (platform === 'win32') { + if (!release && os.platform() === 'win32') { + release = os.release(); + } + + id = release ? winRelease(release) : ''; + return 'Windows' + (id ? ' ' + id : ''); + } + + return platform; +}; + +module.exports = osName; + + +/***/ }), + +/***/ 812: +/***/ (function(module) { + +"use strict"; + +module.exports = (promise, onFinally) => { + onFinally = onFinally || (() => {}); + + return promise.then( + val => new Promise(resolve => { + resolve(onFinally()); + }).then(() => val), + err => new Promise(resolve => { + resolve(onFinally()); + }).then(() => { + throw err; + }) + ); +}; + + +/***/ }), + +/***/ 816: +/***/ (function(module) { + +"use strict"; + +const alias = ['stdin', 'stdout', 'stderr']; + +const hasAlias = opts => alias.some(x => Boolean(opts[x])); + +module.exports = opts => { + if (!opts) { + return null; + } + + if (opts.stdio && hasAlias(opts)) { + throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`); + } + + if (typeof opts.stdio === 'string') { + return opts.stdio; + } + + const stdio = opts.stdio || []; + + if (!Array.isArray(stdio)) { + throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); + } + + const result = []; + const len = Math.max(stdio.length, alias.length); + + for (let i = 0; i < len; i++) { + let value = null; + + if (stdio[i] !== undefined) { + value = stdio[i]; + } else if (opts[alias[i]] !== undefined) { + value = opts[alias[i]]; + } + + result[i] = value; + } + + return result; +}; + + +/***/ }), + +/***/ 835: +/***/ (function(module) { + +module.exports = require("url"); + +/***/ }), + +/***/ 839: +/***/ (function(module) { + +"use strict"; + + +const isWin = process.platform === 'win32'; + +function notFoundError(original, syscall) { + return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { + code: 'ENOENT', + errno: 'ENOENT', + syscall: `${syscall} ${original.command}`, + path: original.command, + spawnargs: original.args, + }); +} + +function hookChildProcess(cp, parsed) { + if (!isWin) { + return; + } + + const originalEmit = cp.emit; + + cp.emit = function (name, arg1) { + // If emitting "exit" event and exit code is 1, we need to check if + // the command exists and emit an "error" instead + // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 + if (name === 'exit') { + const err = verifyENOENT(arg1, parsed, 'spawn'); + + if (err) { + return originalEmit.call(cp, 'error', err); + } + } + + return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params + }; +} + +function verifyENOENT(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawn'); + } + + return null; +} + +function verifyENOENTSync(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawnSync'); + } + + return null; +} + +module.exports = { + hookChildProcess, + verifyENOENT, + verifyENOENTSync, + notFoundError, +}; + + +/***/ }), + +/***/ 849: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/master/src/github.ts +const graphql_1 = __webpack_require__(631); +const rest_1 = __webpack_require__(166); +const Context = __importStar(__webpack_require__(624)); +const httpClient = __importStar(__webpack_require__(675)); +// We need this in order to extend Octokit +rest_1.Octokit.prototype = new rest_1.Octokit(); +exports.context = new Context.Context(); +class GitHub extends rest_1.Octokit { + constructor(token, opts) { + super(GitHub.getOctokitOptions(GitHub.disambiguate(token, opts))); + this.graphql = GitHub.getGraphQL(GitHub.disambiguate(token, opts)); + } + /** + * Disambiguates the constructor overload parameters + */ + static disambiguate(token, opts) { + return [ + typeof token === 'string' ? token : '', + typeof token === 'object' ? token : opts || {} + ]; + } + static getOctokitOptions(args) { + const token = args[0]; + const options = Object.assign({}, args[1]); // Shallow clone - don't mutate the object provided by the caller + // Auth + const auth = GitHub.getAuthString(token, options); + if (auth) { + options.auth = auth; + } + // Proxy + const agent = GitHub.getProxyAgent(options); + if (agent) { + // Shallow clone - don't mutate the object provided by the caller + options.request = options.request ? Object.assign({}, options.request) : {}; + // Set the agent + options.request.agent = agent; + } + return options; + } + static getGraphQL(args) { + const defaults = {}; + const token = args[0]; + const options = args[1]; + // Authorization + const auth = this.getAuthString(token, options); + if (auth) { + defaults.headers = { + authorization: auth + }; + } + // Proxy + const agent = GitHub.getProxyAgent(options); + if (agent) { + defaults.request = { agent }; + } + return graphql_1.graphql.defaults(defaults); + } + static getAuthString(token, options) { + // Validate args + if (!token && !options.auth) { + throw new Error('Parameter token or opts.auth is required'); + } + else if (token && options.auth) { + throw new Error('Parameters token and opts.auth may not both be specified'); + } + return typeof options.auth === 'string' ? options.auth : `token ${token}`; + } + static getProxyAgent(options) { + var _a; + if (!((_a = options.request) === null || _a === void 0 ? void 0 : _a.agent)) { + const serverUrl = 'https://api.github.com'; + if (httpClient.getProxyUrl(serverUrl)) { + const hc = new httpClient.HttpClient(); + return hc.getAgent(serverUrl); + } + } + return undefined; + } +} +exports.GitHub = GitHub; +//# sourceMappingURL=github.js.map + +/***/ }), + +/***/ 851: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +var shebangRegex = __webpack_require__(43); + +module.exports = function (str) { + var match = str.match(shebangRegex); + + if (!match) { + return null; + } + + var arr = match[0].replace(/#! ?/, '').split(' '); + var bin = arr[0].split('/').pop(); + var arg = arr[1]; + + return (bin === 'env' ? + arg : + bin + (arg ? ' ' + arg : '') + ); +}; + + +/***/ }), + +/***/ 853: +/***/ (function(module) { + +module.exports = require("util"); + +/***/ }), + +/***/ 855: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = getFirstPage + +const getPage = __webpack_require__(242) + +function getFirstPage (octokit, link, headers) { + return getPage(octokit, link, 'first', headers) +} + + +/***/ }), + +/***/ 863: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var isPlainObject = _interopDefault(__webpack_require__(488)); +var universalUserAgent = __webpack_require__(156); + +function lowercaseKeys(object) { + if (!object) { + return {}; + } + + return Object.keys(object).reduce((newObj, key) => { + newObj[key.toLowerCase()] = object[key]; + return newObj; + }, {}); +} + +function mergeDeep(defaults, options) { + const result = Object.assign({}, defaults); + Object.keys(options).forEach(key => { + if (isPlainObject(options[key])) { + if (!(key in defaults)) Object.assign(result, { + [key]: options[key] + });else result[key] = mergeDeep(defaults[key], options[key]); + } else { + Object.assign(result, { + [key]: options[key] + }); + } + }); + return result; +} + +function merge(defaults, route, options) { + if (typeof route === "string") { + let [method, url] = route.split(" "); + options = Object.assign(url ? { + method, + url + } : { + url: method + }, options); + } else { + options = Object.assign({}, route); + } // lowercase header names before merging with defaults to avoid duplicates + + + options.headers = lowercaseKeys(options.headers); + const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten + + if (defaults && defaults.mediaType.previews.length) { + mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); + } + + mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); + return mergedOptions; +} + +function addQueryParameters(url, parameters) { + const separator = /\?/.test(url) ? "&" : "?"; + const names = Object.keys(parameters); + + if (names.length === 0) { + return url; + } + + return url + separator + names.map(name => { + if (name === "q") { + return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + } + + return `${name}=${encodeURIComponent(parameters[name])}`; + }).join("&"); +} + +const urlVariableRegex = /\{[^}]+\}/g; + +function removeNonChars(variableName) { + return variableName.replace(/^\W+|\W+$/g, "").split(/,/); +} + +function extractUrlVariableNames(url) { + const matches = url.match(urlVariableRegex); + + if (!matches) { + return []; + } + + return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); +} + +function omit(object, keysToOmit) { + return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { + obj[key] = object[key]; + return obj; + }, {}); +} + +// Based on https://github.com/bramstein/url-template, licensed under BSD +// TODO: create separate package. +// +// Copyright (c) 2012-2014, Bram Stein +// All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. The name of the author may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* istanbul ignore file */ +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + } + + return part; + }).join(""); +} + +function encodeUnreserved(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return "%" + c.charCodeAt(0).toString(16).toUpperCase(); + }); +} + +function encodeValue(operator, value, key) { + value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); + + if (key) { + return encodeUnreserved(key) + "=" + value; + } else { + return value; + } +} + +function isDefined(value) { + return value !== undefined && value !== null; +} + +function isKeyOperator(operator) { + return operator === ";" || operator === "&" || operator === "?"; +} + +function getValues(context, operator, key, modifier) { + var value = context[key], + result = []; + + if (isDefined(value) && value !== "") { + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + value = value.toString(); + + if (modifier && modifier !== "*") { + value = value.substring(0, parseInt(modifier, 10)); + } + + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); + } else { + if (modifier === "*") { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + const tmp = []; + + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function (value) { + tmp.push(encodeValue(operator, value)); + }); + } else { + Object.keys(value).forEach(function (k) { + if (isDefined(value[k])) { + tmp.push(encodeUnreserved(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + + if (isKeyOperator(operator)) { + result.push(encodeUnreserved(key) + "=" + tmp.join(",")); + } else if (tmp.length !== 0) { + result.push(tmp.join(",")); + } + } + } + } else { + if (operator === ";") { + if (isDefined(value)) { + result.push(encodeUnreserved(key)); + } + } else if (value === "" && (operator === "&" || operator === "?")) { + result.push(encodeUnreserved(key) + "="); + } else if (value === "") { + result.push(""); + } + } + + return result; +} + +function parseUrl(template) { + return { + expand: expand.bind(null, template) + }; +} + +function expand(template, context) { + var operators = ["+", "#", ".", "/", ";", "?", "&"]; + return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { + if (expression) { + let operator = ""; + const values = []; + + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + + expression.split(/,/g).forEach(function (variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); + }); + + if (operator && operator !== "+") { + var separator = ","; + + if (operator === "?") { + separator = "&"; + } else if (operator !== "#") { + separator = operator; + } + + return (values.length !== 0 ? operator : "") + values.join(separator); + } else { + return values.join(","); + } + } else { + return encodeReserved(literal); + } + }); +} + +function parse(options) { + // https://fetch.spec.whatwg.org/#methods + let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible + + let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{+$1}"); + let headers = Object.assign({}, options.headers); + let body; + let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later + + const urlVariableNames = extractUrlVariableNames(url); + url = parseUrl(url).expand(parameters); + + if (!/^http/.test(url)) { + url = options.baseUrl + url; + } + + const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); + const remainingParameters = omit(parameters, omittedParameters); + const isBinaryRequset = /application\/octet-stream/i.test(headers.accept); + + if (!isBinaryRequset) { + if (options.mediaType.format) { + // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw + headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); + } + + if (options.mediaType.previews.length) { + const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; + headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { + const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; + return `application/vnd.github.${preview}-preview${format}`; + }).join(","); + } + } // for GET/HEAD requests, set URL query parameters from remaining parameters + // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters + + + if (["GET", "HEAD"].includes(method)) { + url = addQueryParameters(url, remainingParameters); + } else { + if ("data" in remainingParameters) { + body = remainingParameters.data; + } else { + if (Object.keys(remainingParameters).length) { + body = remainingParameters; + } else { + headers["content-length"] = 0; + } + } + } // default content-type for JSON if body is set + + + if (!headers["content-type"] && typeof body !== "undefined") { + headers["content-type"] = "application/json; charset=utf-8"; + } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. + // fetch does not allow to set `content-length` header, but we can set body to an empty string + + + if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { + body = ""; + } // Only return body/request keys if present + + + return Object.assign({ + method, + url, + headers + }, typeof body !== "undefined" ? { + body + } : null, options.request ? { + request: options.request + } : null); +} + +function endpointWithDefaults(defaults, route, options) { + return parse(merge(defaults, route, options)); +} + +function withDefaults(oldDefaults, newDefaults) { + const DEFAULTS = merge(oldDefaults, newDefaults); + const endpoint = endpointWithDefaults.bind(null, DEFAULTS); + return Object.assign(endpoint, { + DEFAULTS, + defaults: withDefaults.bind(null, DEFAULTS), + merge: merge.bind(null, DEFAULTS), + parse + }); +} + +const VERSION = "6.0.1"; + +const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. +// So we use RequestParameters and add method as additional required property. + +const DEFAULTS = { + method: "GET", + baseUrl: "https://api.github.com", + headers: { + accept: "application/vnd.github.v3+json", + "user-agent": userAgent + }, + mediaType: { + format: "", + previews: [] + } +}; + +const endpoint = withDefaults(null, DEFAULTS); + +exports.endpoint = endpoint; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 881: +/***/ (function(module) { + +module.exports = register + +function register (state, name, method, options) { + if (typeof method !== 'function') { + throw new Error('method for before hook must be a function') + } + + if (!options) { + options = {} + } + + if (Array.isArray(name)) { + return name.reverse().reduce(function (callback, name) { + return register.bind(null, state, name, callback, options) + }, method)() + } + + return Promise.resolve() + .then(function () { + if (!state.registry[name]) { + return method(options) + } + + return (state.registry[name]).reduce(function (method, registered) { + return registered.hook.bind(null, method, options) + }, method)() + }) +} + + +/***/ }), + +/***/ 891: +/***/ (function(module) { + +module.exports = addHook + +function addHook (state, kind, name, hook) { + var orig = hook + if (!state.registry[name]) { + state.registry[name] = [] + } + + if (kind === 'before') { + hook = function (method, options) { + return Promise.resolve() + .then(orig.bind(null, options)) + .then(method.bind(null, options)) + } + } + + if (kind === 'after') { + hook = function (method, options) { + var result + return Promise.resolve() + .then(method.bind(null, options)) + .then(function (result_) { + result = result_ + return orig(result, options) + }) + .then(function () { + return result + }) + } + } + + if (kind === 'error') { + hook = function (method, options) { + return Promise.resolve() + .then(method.bind(null, options)) + .catch(function (error) { + return orig(error, options) + }) + } + } + + state.registry[name].push({ + hook: hook, + orig: orig + }) +} + + +/***/ }), + +/***/ 898: +/***/ (function(module) { + +"use strict"; + + +var isStream = module.exports = function (stream) { + return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function'; +}; + +isStream.writable = function (stream) { + return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object'; +}; + +isStream.readable = function (stream) { + return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object'; +}; + +isStream.duplex = function (stream) { + return isStream.writable(stream) && isStream.readable(stream); +}; + +isStream.transform = function (stream) { + return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object'; +}; + + +/***/ }), + +/***/ 904: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = factory; + +const Octokit = __webpack_require__(275); +const registerPlugin = __webpack_require__(932); + +function factory(plugins) { + const Api = Octokit.bind(null, plugins || []); + Api.plugin = registerPlugin.bind(null, plugins || []); + return Api; +} + + +/***/ }), + +/***/ 932: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = registerPlugin; + +const factory = __webpack_require__(904); + +function registerPlugin(plugins, pluginFunction) { + return factory( + plugins.includes(pluginFunction) ? plugins : plugins.concat(pluginFunction) + ); +} + + +/***/ }), + +/***/ 937: +/***/ (function(module) { + +module.exports = require("net"); + +/***/ }), + +/***/ 942: +/***/ (function(module, __unusedexports, __webpack_require__) { + +module.exports = parseOptions; + +const { Deprecation } = __webpack_require__(336); +const { getUserAgent } = __webpack_require__(476); +const once = __webpack_require__(678); + +const pkg = __webpack_require__(676); + +const deprecateOptionsTimeout = once((log, deprecation) => + log.warn(deprecation) +); +const deprecateOptionsAgent = once((log, deprecation) => log.warn(deprecation)); +const deprecateOptionsHeaders = once((log, deprecation) => + log.warn(deprecation) +); + +function parseOptions(options, log, hook) { + if (options.headers) { + options.headers = Object.keys(options.headers).reduce((newObj, key) => { + newObj[key.toLowerCase()] = options.headers[key]; + return newObj; + }, {}); + } + + const clientDefaults = { + headers: options.headers || {}, + request: options.request || {}, + mediaType: { + previews: [], + format: "" + } + }; + + if (options.baseUrl) { + clientDefaults.baseUrl = options.baseUrl; + } + + if (options.userAgent) { + clientDefaults.headers["user-agent"] = options.userAgent; + } + + if (options.previews) { + clientDefaults.mediaType.previews = options.previews; + } + + if (options.timeZone) { + clientDefaults.headers["time-zone"] = options.timeZone; + } + + if (options.timeout) { + deprecateOptionsTimeout( + log, + new Deprecation( + "[@octokit/rest] new Octokit({timeout}) is deprecated. Use {request: {timeout}} instead. See https://github.com/octokit/request.js#request" + ) + ); + clientDefaults.request.timeout = options.timeout; + } + + if (options.agent) { + deprecateOptionsAgent( + log, + new Deprecation( + "[@octokit/rest] new Octokit({agent}) is deprecated. Use {request: {agent}} instead. See https://github.com/octokit/request.js#request" + ) + ); + clientDefaults.request.agent = options.agent; + } + + if (options.headers) { + deprecateOptionsHeaders( + log, + new Deprecation( + "[@octokit/rest] new Octokit({headers}) is deprecated. Use {userAgent, previews} instead. See https://github.com/octokit/request.js#request" + ) + ); + } + + const userAgentOption = clientDefaults.headers["user-agent"]; + const defaultUserAgent = `octokit.js/${pkg.version} ${getUserAgent()}`; + + clientDefaults.headers["user-agent"] = [userAgentOption, defaultUserAgent] + .filter(Boolean) + .join(" "); + + clientDefaults.request.hook = hook.bind(null, "request"); + + return clientDefaults; +} + + +/***/ }), + +/***/ 960: +/***/ (function(module, __unusedexports, __webpack_require__) { + +"use strict"; + +const pump = __webpack_require__(354); +const bufferStream = __webpack_require__(621); + +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; + } +} + +function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + options = Object.assign({maxBuffer: Infinity}, options); + + const {maxBuffer} = options; + + let stream; + return new Promise((resolve, reject) => { + const rejectPromise = error => { + if (error) { // A null check + error.bufferedData = stream.getBufferedValue(); + } + reject(error); + }; + + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } + + resolve(); + }); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }).then(() => stream.getBufferedValue()); +} + +module.exports = getStream; +module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'})); +module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true})); +module.exports.MaxBufferError = MaxBufferError; + + +/***/ }), + +/***/ 962: +/***/ (function(module, __unusedexports, __webpack_require__) { + +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +var assert = __webpack_require__(357) +var signals = __webpack_require__(665) +var isWin = /^win/i.test(process.platform) + +var EE = __webpack_require__(614) +/* istanbul ignore if */ +if (typeof EE !== 'function') { + EE = EE.EventEmitter +} + +var emitter +if (process.__signal_exit_emitter__) { + emitter = process.__signal_exit_emitter__ +} else { + emitter = process.__signal_exit_emitter__ = new EE() + emitter.count = 0 + emitter.emitted = {} +} + +// Because this emitter is a global, we have to check to see if a +// previous version of this library failed to enable infinite listeners. +// I know what you're about to say. But literally everything about +// signal-exit is a compromise with evil. Get used to it. +if (!emitter.infinite) { + emitter.setMaxListeners(Infinity) + emitter.infinite = true +} + +module.exports = function (cb, opts) { + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') + + if (loaded === false) { + load() + } + + var ev = 'exit' + if (opts && opts.alwaysLast) { + ev = 'afterexit' + } + + var remove = function () { + emitter.removeListener(ev, cb) + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload() + } + } + emitter.on(ev, cb) + + return remove +} + +module.exports.unload = unload +function unload () { + if (!loaded) { + return + } + loaded = false + + signals.forEach(function (sig) { + try { + process.removeListener(sig, sigListeners[sig]) + } catch (er) {} + }) + process.emit = originalProcessEmit + process.reallyExit = originalProcessReallyExit + emitter.count -= 1 +} + +function emit (event, code, signal) { + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true + emitter.emit(event, code, signal) +} + +// { : , ... } +var sigListeners = {} +signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process.listeners(sig) + if (listeners.length === emitter.count) { + unload() + emit('exit', null, sig) + /* istanbul ignore next */ + emit('afterexit', null, sig) + /* istanbul ignore next */ + if (isWin && sig === 'SIGHUP') { + // "SIGHUP" throws an `ENOSYS` error on Windows, + // so use a supported signal instead + sig = 'SIGINT' + } + process.kill(process.pid, sig) + } + } +}) + +module.exports.signals = function () { + return signals +} + +module.exports.load = load + +var loaded = false + +function load () { + if (loaded) { + return + } + loaded = true + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1 + + signals = signals.filter(function (sig) { + try { + process.on(sig, sigListeners[sig]) + return true + } catch (er) { + return false + } + }) + + process.emit = processEmit + process.reallyExit = processReallyExit +} + +var originalProcessReallyExit = process.reallyExit +function processReallyExit (code) { + process.exitCode = code || 0 + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + originalProcessReallyExit.call(process, process.exitCode) +} + +var originalProcessEmit = process.emit +function processEmit (ev, arg) { + if (ev === 'exit') { + if (arg !== undefined) { + process.exitCode = arg + } + var ret = originalProcessEmit.apply(this, arguments) + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + return ret + } else { + return originalProcessEmit.apply(this, arguments) + } +} + + +/***/ }), + +/***/ 979: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var endpoint = __webpack_require__(863); +var universalUserAgent = __webpack_require__(808); +var isPlainObject = _interopDefault(__webpack_require__(488)); +var nodeFetch = _interopDefault(__webpack_require__(134)); +var requestError = __webpack_require__(479); + +const VERSION = "5.4.2"; + +function getBufferResponse(response) { + return response.arrayBuffer(); +} + +function fetchWrapper(requestOptions) { + if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { + requestOptions.body = JSON.stringify(requestOptions.body); + } + + let headers = {}; + let status; + let url; + const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; + return fetch(requestOptions.url, Object.assign({ + method: requestOptions.method, + body: requestOptions.body, + headers: requestOptions.headers, + redirect: requestOptions.redirect + }, requestOptions.request)).then(response => { + url = response.url; + status = response.status; + + for (const keyAndValue of response.headers) { + headers[keyAndValue[0]] = keyAndValue[1]; + } + + if (status === 204 || status === 205) { + return; + } // GitHub API returns 200 for HEAD requests + + + if (requestOptions.method === "HEAD") { + if (status < 400) { + return; + } + + throw new requestError.RequestError(response.statusText, status, { + headers, + request: requestOptions + }); + } + + if (status === 304) { + throw new requestError.RequestError("Not modified", status, { + headers, + request: requestOptions + }); + } + + if (status >= 400) { + return response.text().then(message => { + const error = new requestError.RequestError(message, status, { + headers, + request: requestOptions + }); + + try { + let responseBody = JSON.parse(error.message); + Object.assign(error, responseBody); + let errors = responseBody.errors; // Assumption `errors` would always be in Array format + + error.message = error.message + ": " + errors.map(JSON.stringify).join(", "); + } catch (e) {// ignore, see octokit/rest.js#684 + } + + throw error; + }); + } + + const contentType = response.headers.get("content-type"); + + if (/application\/json/.test(contentType)) { + return response.json(); + } + + if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { + return response.text(); + } + + return getBufferResponse(response); + }).then(data => { + return { + status, + url, + headers, + data + }; + }).catch(error => { + if (error instanceof requestError.RequestError) { + throw error; + } + + throw new requestError.RequestError(error.message, 500, { + headers, + request: requestOptions + }); + }); +} + +function withDefaults(oldEndpoint, newDefaults) { + const endpoint = oldEndpoint.defaults(newDefaults); + + const newApi = function (route, parameters) { + const endpointOptions = endpoint.merge(route, parameters); + + if (!endpointOptions.request || !endpointOptions.request.hook) { + return fetchWrapper(endpoint.parse(endpointOptions)); + } + + const request = (route, parameters) => { + return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); + }; + + Object.assign(request, { + endpoint, + defaults: withDefaults.bind(null, endpoint) + }); + return endpointOptions.request.hook(request, endpointOptions); + }; + + return Object.assign(newApi, { + endpoint, + defaults: withDefaults.bind(null, endpoint) + }); +} + +const request = withDefaults(endpoint.endpoint, { + headers: { + "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` + } +}); + +exports.request = request; +//# sourceMappingURL=index.js.map + + +/***/ }), + +/***/ 998: +/***/ (function(__unusedmodule, __unusedexports, __webpack_require__) { + +const core = __webpack_require__(727); +const github = __webpack_require__(849); + +async function run() { + try { + + const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); + const username = github.context.actor; + const token = core.getInput("repo-token"); + const prnumber = core.getInput("number"); + const octokit = new github.GitHub(token); + + // The comment in a successfully merged pull request + const message = `Hello @${username}, congratulations! You've successfully submitted a pull request. 🎉 + **Next steps** + - Continue contributing: If you're looking for projects to contribute to, checkout our [webapp](https://firstcontributions.github.io). + - Join our slack group: We have a community to help/support contributors. [Join slack group](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + - Share on social media: You can share this content to help more people. [Share](https://firstcontributions.github.io/#social-share). + +We'd love to hear your thoughts about this project. Let us know how we can improve my commenting or opening an issue here.`; + + // Create a comment on pull request + const response = await octokit.issues.createComment({ + owner, + repo, + issue_number: prnumber, + body: message + }); + + // Merge pull request + const { data: pullRequest } = await octokit.pulls.merge({ + repo, + owner, + pull_number: prnumber + }); + + + } catch (error) { + core.setFailed(error.message); + } +} + +run(); + +/***/ }) + +/******/ }); \ No newline at end of file diff --git a/.github/actions/automerge/index.js b/.github/actions/automerge/index.js new file mode 100644 index 00000000000..8486d275cc2 --- /dev/null +++ b/.github/actions/automerge/index.js @@ -0,0 +1,43 @@ +const core = require("@actions/core"); +const github = require("@actions/github"); + +async function run() { + try { + + const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); + const username = github.context.actor; + const token = core.getInput("repo-token"); + const prnumber = core.getInput("number"); + const octokit = new github.GitHub(token); + + // The comment in a successfully merged pull request + const message = `Hello @${username}, congratulations! You've successfully submitted a pull request. 🎉 + **Next steps** + - Continue contributing: If you're looking for projects to contribute to, checkout our [webapp](https://firstcontributions.github.io). + - Join our slack group: We have a community to help/support contributors. [Join slack group](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + - Share on social media: You can share this content to help more people. [Share](https://firstcontributions.github.io/#social-share). + +We'd love to hear your thoughts about this project. Let us know how we can improve my commenting or opening an issue here.`; + + // Create a comment on pull request + const response = await octokit.issues.createComment({ + owner, + repo, + issue_number: prnumber, + body: message + }); + + // Merge pull request + const { data: pullRequest } = await octokit.pulls.merge({ + repo, + owner, + pull_number: prnumber + }); + + + } catch (error) { + core.setFailed(error.message); + } +} + +run(); \ No newline at end of file diff --git a/.github/actions/automerge/package.json b/.github/actions/automerge/package.json new file mode 100644 index 00000000000..dfa3bacb128 --- /dev/null +++ b/.github/actions/automerge/package.json @@ -0,0 +1,16 @@ +{ + "name": "automerge", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@actions/core": "^1.2.4", + "@actions/github": "^2.1.1" + } +} \ No newline at end of file diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml new file mode 100644 index 00000000000..72f204ce170 --- /dev/null +++ b/.github/workflows/automerge.yml @@ -0,0 +1,21 @@ +name: automerge_workflow + +on: + pull_request: + types: [opened, edited, reopened, labeled] + paths: + - 'Contributors.md' + +jobs: + automerge_pr: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + + - name: merge-pr + uses: ./.github/actions/automerge + if: ${{github.event.pull_request.additions == 1 || (github.event.pull_request.additions == 2 && github.event.pull_request.deletions == 1)}} + with: + repo-token: ${{secrets.MergeToken}} + number: ${{github.event.pull_request.number}} \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..9d7f1e51c56 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,68 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behaviour that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language. +* Being respectful of differing viewpoints and experiences. +* Gracefully accepting constructive criticism. +* Focusing on what is best for the community. +* Showing empathy towards other community members. + +Examples of unacceptable behaviour by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances. +* Trolling, insulting/derogatory comments, and personal or political attacks. +* Public or private harassment. +* Publishing others' private information, such as a physical or electronic address, without explicit permission. +* Other conduct which could reasonably be considered inappropriate in a professional setting. + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behaviour and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behaviour. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviours that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting [roshanjossey@gmail.com](mailto:roshanjossey@gmail.com). +All complaints will be reviewed and investigated and will result in a response +that is deemed necessary and appropriate to the circumstances. The project team +is obligated to maintain confidentiality with regard to the reporter of an +incident. Further details of specific enforcement policies may be posted +separately. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Contributors.md b/Contributors.md new file mode 100644 index 00000000000..3337a3ca6cb --- /dev/null +++ b/Contributors.md @@ -0,0 +1,974 @@ +# Contributors +- [Pyae Phyo Khant](https://github.com/PyaePhyoKhant) +- [Sayantan Karmakar](https://github.com/sayantank) +- [MEC](https://github.com/mecpl) +- [SKRUW](https://github.com/skruw) +- [Russ_Wilcox](https://github.com/rwilcox518) +- [Meerkat1999](https://github.com/Meerkats1999) +- [expert-geeks](https://github.com/expert-geeks) +- [Ranjeet kumar](https://github.com/ranjeet44) +- [Maraket](https://github.com/Maraket) +- [Filipe Pinato](https://github.com/tiofih) +- [Dan Chif](https://github.com/nadchif) +- [Steve Hardy](https://github.com/Govanator12) +- [Carnival Wilson](https://github.com/TiKebek) +- [Daneel Rakow](https://github.com/daneelrakow) +- [archithadge](https://github.com/archithadge) +- [Eric Hansen](https://github.com/ehansen247) +- [James Au](https://github.com/jamesaucode) +- [Tulsi Jain](https://github.com/tulsiksng) +- [Uyin Solomon](https://github.com/rootleet) +- [Brandon Allen](https://github.com/eldon2) +- [Cassandra Lee](https://github.com/yieng) +- [Jordi Hoven](https://github.com/Jordakoes) +- [Puneeth PS](https://github.com/puneethps) +- [evanca](https://github.com/evanca) +- [Shubham Atlani](https://github.com/shubhamatlani) +- [Nikhil Arya](https://github.com/nikhilaryann) +- [Zeyi Chen](https://github.com/zeyichen) +- [Tran Le Quoc Anh](https://github.com/Al0ngsy) +- [bethuel](https://github.com/bcmmbaga) +- [rkg18](https://github.com/rkg18) +- [m401](https://github.com/m401) +- [Claire Wright](https://github.com/ccannawright) +- [Ben](https://github.com/ChecksumFailed) +- [Erik Hsu](https://github.com/erikhsu) +- [Pranesh](https://github.com/klostur) +- [Ahmad Sami](https://github.com/Asami1997) +- [Yash Budukh](https://github.com/budukhyash) +- [Ruchika Gupta](https://github.com/ruchikaguptaa) +- [allEyezOnCode](https://github.com/allEyezOnCode) +- [kartikchauhan](https://github.com/kartikchauhan) +- [oranjjun](https://github.com/oranjjun) +- [Greg Mac](https://github.com/gregmacdev) +- [Wen Liang](https://github.com/wensuk) +- [Mantas Astrauskas](https://github.com/MAstrauskas) +- [Preyansh Kaushik](https://github.com/preyansh98) +- [Anirudh](https://github.com/Anirudh09) +- [Damien Burke](https://github.com/DamienJBurke) +- [Satyam Mishra](https://github.com/satyam15mishra) +- [DJFILL](https://github.com/djfill) +- [BenEwing33](https://github.com/BenEwing33) +- [tangarts](https://github.com/tangarts) +- [Girish Poojari](https://github.com/girishpoojari) +- [jtisaac](https://github.com/jtisaac) +- [doMConSwiss](https://github.com/doMConSwiss) +- [GeorgesD](https://github.com/sergeod9) +- [Davi Pessanha](https://github.com/dpessanha/) +- [brriann](https://github.com/brriann) +- [Gurmehar Sandhu](https://github.com/GurmeharS) +- [Satvir Sandhu](https://github.com/356Sandhu) +- [Skylar Liang](https://github.com/SkylarLJY) +- [Xuan Tao](https://github.com/Tobby0824/) +- [John Lin](https://github.com/jlin22) +- [Ralph Quirequire](https://github.com/ralphqq) +- [Marcel Gehlen](https://github.com/mgehlen) +- [Miguel Vellasco](https://github.com/mvellasco) +- [Nikola Drakulic](https://github.com/Drakula44) +- [Nikhil K.](https://github.com/nk108) +- [Aris Panagiotopoulos](https://github.com/aristeidys) +- [pyku](https://github.com/pyku/) +- [Alberto Valdiviez](https://github.com/albertogfv) +- [Kuncoro Yoko](https://github.com/Zemhart) +- [Shivam Rathore](https://github.com/rathore05) +- [Harsh Prabhu](https://github.com/harsh1599) +- [Deathless Kraken](https://github.com/DeathlessKraken) +- [Sean Donnellan](https://github.com/seandonnellan) +- [Ramsay Sewell](https://github.com/ramsaysewell) +- [Philip Cosentino](https://github.com/pcbootsy) +- [jo](https://github.com/folde01) +- [Edwina Muir](https://github.com/edgmuir) +- [jhavn](https://github.com/jhavn) +- [yasnogor](https://github.com/yasnogor) +- [newguy](https://github.com/puneepth) +- [Jacqueline Espinoza](https://github.com/JacquelineEspinoza) +- [Pietro Falco](https://github.com/flcpietro) +- [Sam Gross](https://github.com/ShmouG) +- [xing](https://github.com/chuanyuxing) +- [Aiya Yegenberdiyeva](https://github.com/ayegnb) +- [aetenotnk](https://github.com/aetenotnk) +- [Lam Tran](https://github.com/Lam7150) +- [Nephzee](https://github.com/nephzee) +- [Tyler Pearson](https://github.com/tap1994) +- [Allentine Paulis](https://github.com/rainbowmoonlight) +- [Michał Domarus](https://github.com/mdomarus) +- [Carlos Castro](https://github.com/zero4994) +- [Michelle Law](https//github.com/feamoda) +- [tkolleh](https://github.com/tkolleh) +- [muxyu](https://github.com/muxyu) +- [jkhhuse](https://github.com/jkhhuse) +- [HyeonMyeong Seo](https://github.com/SeoHyeonMyeong) +- [David Fernández](https://github.com/davidfdezalcoba) +- [Yeptony](https://github.com/yeptony) +- [Seiichi Ariga](https://github.com/s-ariga) +- [Seung-Hyun-Jeon](https://github.com/robinstart) +- [Yang Gyeong-mo](https://github.com/yangkyeongmo/) +- [Jake Goodwin](https://github.com/JakeGoodwin) +- [Gauhar Ayub Khan](https://github.com/gauharayub) +- [Misha Krul](https://github.com/mishakrul) +- [dorf06](https://github.com/dorf06) +- [JaeYoung Suh](https://github.com/donddog) +- [Riley Hancox](https://github.com/rhancox4303) +- [Ashu K](https://github.com/akm12k16) +- [omprakash_swami](https://github.com/opswami75) +- [Agis Kounelis](https://github.com/AgisKounelis) +- [Kameel](https://github.com/kam-eeel) +- [Sure](https://github.com/surebhandari) +- [Abhishek Ahirwar](https://github.com/abhiahirwar) +- [Swarna Sarkar](https://github.com/sarkarsd) +- [jt120](https://github.com/jt120) +- [ferminht](https://github.com/ferminhg) +- [Brandon E](https://github.com/ChoppinLumber) +- [John Prideaux](https://github.com/jpridx) +- [Javad Yadegari](https://github.com/jyadegari) +- [Sashwat Anagolum](https://github.com/SashwatAnagolum) +- [thojest](https://github.com/thojest) +- [Kevin Satur](https://github.com/math-ecen) +- [Bohdan Konorin](https://github.com/bogdaner2) +- [Prakash Sukumar](https://github.com/praknetlg) +- [David Fernandes](https://github.com/codigospredicados) +- [Marcin Lubowicz](https://github.com/Moviss) +- [JR Cook](https://github.com/Eldorian) +- [Neal Stumpf](https://github.com/MildlyOffensive) +- [Roopa Madihally](https://github.com/roopabdr) +- [JR Cook](https://github.com/Eldorian) +- [Jovan Jocic](https://github.com/the-jovan) +- [jhkim](https://github.com/capefeather) +- [tpartridge1](https://github.com/tpartridge1) +- [Shenyu](https://github.com/lishenyu16) +- [Peter Kim](https://github.com/PeterKim1967) +- [Darren](https://github.com/Trebond) +- [Moamen Moataz](https://github.com/MoamenMoatazYoussef) +- [Peter Kim](https://github.com/PeterKim1967) +- [mafnah](https://github.com/mafnah) +- [Emilie](https://github.com/EmOnTheWeb) +- [Ryan McCormick](https://github.com/rmccorm4) +- [Standley Eugene](https://github.com/estand25) +- [Neo Choi](https://github.com/vampireneo) +- [Peter Zinkovsky](https://github.com/peterz3) +- [Nik Lutzenhiser](https://github.com/Smokstak) +- [Jan Biardzki](https://github.com/yanchesky/) +- [Henrique Resende](https://github.com/HenryXV) +- [Igor Kulakov](https://github.com/iiKulakov) +- [Richard Theaker](https://github.com/rtheaker) +- [Kaiser](https://github.com/kaisernahid) +- [François Bibeau](https://github.com/fbibeau) +- [Snehal Somalraju](https://github.com/ssomalraju1) +- [Iyossias Eshete](https://github.com/iyossias-eshete) +- [Lucian Dinu](https://github.com/luciandinu93) +- [meSSH](https://github.com/IAmSSH) +- [Ewan Stern](https://github.com/ewanstern) +- [Shehan](https://github.com/shehan1993) +- [Carlos Fernandez](https://github.com/CarlosMFdz) +- [Joss Sparks](https://github.com/RemakingEden) +- [Joshua Cammock](https://github.com/JCammock) +- [Lindos Pechos](https://github.com/LindosPechos) +- [Alimur Razi Rana](https://github.com/Alimurrazi) +- [Manoj M](https://github.com/manoj1222) +- [Jorge N](https://github.com/jinaoc) +- [Joshua Key](https://github.com/JoshuaKey) +- [Coder](https://github.com/coder9604) +- [Kin Kin](https://github.com/adkinley) +- [Nathan Schneider](https://github.com/nathanlschneider) +- [Rebecca Cho](https://github.com/choeuna) +- [Sreymeas Nao](https://github.com/meass) +- [Nigel Moore](https://github.com/nimows) +- [jecodeduweb](https://github.com/jecodeduweb) +- [IcerOut](https://github.com/IcerOut) +- [Alireza fassih](https://github.com/alireza-fassih) +- [Orestis Tanis](https://github.com/OrestisTanis) +- [Eric Ingland](https://github.com/eingland) +- [Jim Ritchie](https://github.com/beldin0) +- [Fabiano Ricci](https://github.com/faricci) +- [Hao Wei Goh](https://github.com/haowei920) +- [Saboo](https://github.com/Saboo27) +- [Lucas Melo](https://github.com/lucasmeloo) +- [Matt SQ](https://github.com/greyghost13) +- [John McGonagle](https://github.com/jgonagle) +- [Steven Zilberberg](https://github.com/srz2) +- [Justin Hiester](https://github.com/jhiester) +- [Giwoo G Lee](https://github.com/gglee89) +- [Thomas H](https://github.com/thenderson55) +- [Jason Anderson](https://github.com/andersjr1984) +- [Dalton Maahs](https://github.com/dmaahs2017) +- [Kim Sangyeon](https://github.com/kimsangyeon) +- [Chris Walters](https://github.com/Chriswalt64) +- [Visaj Kapadia](https://github.com/visajkapadia) +- [Jorge Gabitto](https://github.com/jgabitto) +- [Monish Khambhati](https://github.com/moni2096) +- [Justin Do](https://github.com/justinkhado) +- [DCSnial](https://github.com/wangyanchang21) +- [Pawan Yadav](https://github.com/pawanraocse) +- [Travis Appel](https://github.com/tlappel) +- [Biplab Mazumder](https://github.com/biplab-ca) +- [Savish Bedi](https://github.com/savish28) +- [Steve Ctzbee](https://github.com/ctzbee) +- [Kenny Santiago](https://github.com/cialespr) +- [Mackey Lao](https://github.com/MackeyLao) +- [Sergio Peña](https://github.com/Sergiop79) +- [Mahmoud Adel](https://github.com/mohmyo) +- [Matt Silva](https://github.com/MattSilva) +- [Prabal Roy Choudhury](https://github.com/prabalrc) +- [Chin Hong](https://github.com/chinhong1703) +- [Artit Pinthong](https://github.com/str4t3gy) +- [Taylor Danielson](https://github.com/disabledtech/) +- [Jason Bland](https://github.com/jasonbland) +- [Alex Parmentier](https://github.com/alexparm4) +- [Andy Long](https://github.com/along5) +- [Logan Watson](https://github.com/lwatson2) +- [Francesco Sardone](https://github.com/Airsit) +- [Michael Shea](https://github.com/soum-io) +- [Priyanka Bakhshi](https://github.com/PriyankaRBakhshi) +- [Andres Hernandez](https://github.com/Thunderbolt2010) +- [Ahmed Ragab](https://github.com/ahmedrgb1) +- [Chen Wang](https://github.com/ChenMetanoia) +- [Berkay Coban](https://github.com/bcobann) +- [Anurag Sethi](https://github.com/anurag00) +- [Markus Wernersbach](https://github.com/wernersbacher) +- [David E. Williams](https://github.com/laxcougar18) +- [Max Marzolf](https://github.com/maxmarzolf) +- [Rajiv K.](https://github.com/jeevesofrkdia) +- [Alberto Oporto Ames](https://github.com/otreblan) +- [Thien Tran](https://github.com/gau-nernst) +- [Alex Bott](https://github.com/alexbott) +- [Zach Chen](https://github.com/zachenn) +- [Edima Udo](https://github.com/edimaudo) +- [Anand Siva](https://gitbhub.com/anandaprakash1979) +- [Donte Winslow](https://github.com/dontewinslow) +- [Yash Gupta](https://yashgupta.surge.sh) +- [Tyler Wallis](https://github.com/tylerwallis95) +- [Sam Richardson](https://github.com/samjrrr) +- [Pratheek Athreya](https://github.com/pratheekbalaji) +- [Aparna Annapragada](https://github.com/aparnaannapragada) +- [Max Fahrmeyer](https://github.com/MaxFahr) +- [Melvin Reodique](https://github.com/mreodique) +- [REDACTED](https://github.com/REDACTED) +- [Ramesh](https://github.com/rallu) +- [Ben Walters](https://github.com/bwalterscoding) +- [VelxusDev](https://github.com/VelxusDev) +- [Ayush Bhatnagar](https://github.com/Ayush-Bhatnagar) +- [Jacob Vanmeter](https://github.com/unroasted) +- [Joshua Cook](https://github.com/jdcook3) +- [Rafael Rubia](https://github.com/rafaelrubia) +- [Vishal Gole](https://github.com/golevishal) +- [Hassan Tasleem](https://github.com/hass321) +- [Steven Jiang](https://github.com/xiangj1) +- [Tim Albert](https://github.com/talbert1209) +- [Alif Jahan](https://github.com/zxalif) +- [Tamar Shacked](https://github.com/tshacked) +- [Mohamed Taha Ben Brahim](https://github.com/MedTaha4Ever) +- [syxter](https://github.com/syxter) +- [Elizabeth Jolly](https://github.com/thelizzerd) +- [Manuel Pissanos](https://github.com/mpissanos) +- [Alvin Jorrel Pascual](https://github.com/alvinjorrel) +- [Nate deBoer](https://github.com/CrazyMuppets) +- [Se7enSquared](https://github.com/Se7enSquared) +- [Panasarn Kanchanapiboon](https://github.com/musickn) +- [Sary Sodaney](https://github.com/sodaney) +- [sparamas](https://github.com/sparamas) +- [vimal-o-nathan](https://github.com/vimal-o-nathan) +- [Dipanshu Agarwal](https://github.com/Dipanshu9689) +- [Fergus Mac](https://github.com/fergusmac) +- [Jonathan Miller](https://gitlab.com/jonmiller131313) +- [grun00](https://github.com/grun00) +- [tsuno](https://gitlab.com/tsuno) +- [jkrajcir](https://github.com/jkrajcir) +- [Nick Pounders](https://github.com/pounders82) +- [Hunter Elofson](https://github.com/hunterelofson) +- [Oliver Coley](https://github.com/mxoliver) +- [yanfeng1012](https://gitlab.com/yanfeng1012) +- [Josue Lopes](https://github.com/Josue10599) +- [Oguzhan Ozgul](https://github.com/oguzhanozgul) +- [Focus Ifeanyi](https://github.com/focusiq) +- [Saurabh Suman](https://github.com/saurabh98s) +- [Keegan Smith](https://github.com/keegan211) +- [Soniya Doshi](https://github.com/soniyadoshi) +- [Sharath Rao](https://github.com/srylix10) +- [Bulent Turkmen](https://github.com/faranjit) +- [Chor Visalrotanak](https://github.com/visalrotanak) +- [Jannik](https://github.com/EpansU) +- [Irene Arapogiorgi](https://github.com/IreneArapogiorgi) +- [2277abdullah](https://github.com/2277abdullah) +- [Alyssa](https://github.com/aghmkim) +- [Boopathi Sakthivel](https://github.com/boopathisakthivel) +- [Tarun Dugar](https://github.com/dugar-tarun) +- [Josh Vita](https://github.com/jvita) +- [ShashankMath](https://github.com/shashankMath/first-contributions) +- [Nicolas Bermudez](https://github.com/nicobermudez) +- [Laura Thomas](https://github.com/thomastwosome) +- [Isaac Burton](https://github.com/burtonyaboy) +- [Adib Al-Amir](https://github.com/adibalamir) +- [Jimmy Jeong](https://github.com/jeongjimmy32) +- [@rezzco](https://github.com/rezzco) +- [Danilo Galvão](https://github.com/Fisiquelaz) +- [Lucas Oliveira](https://github.com/Lucas-F-Oliveira) +- [Sunny Setia](https://github.com/sunnysetia93) +- [nnuch](https://github.com/nnuch) +- [Kinoahi](https://github.com/Kinoahi) +- [Tony-oldport](https://github.com/tony-oldport/) +- [Jonathan Barker](https://github.com/jonathanbarker) +- [Alex Rainier](https://github.com/acrainier1) +- [Steven Moe](https://github.com/stevenny) +- [Ben Mattson](https://github.com/benmattson7) +- [Tharp Arthur](https://github.com/arthurtharp) +- [Ayus Das](https://github.com/ayusdas2000) +- [Primarch Strelok](https://github.com/primarchstrelok) +- [Jeffrey Warner](https://github.com/jeffnwarner) +- [William Huynh](https://github.com/w2huy) +- [Aviral Bajpai](https://github.com/aviral19) +- [Shawn Smith](https://github.com/shawnsmith88) +- [Goutham Menon](https://github.com/gouthammenon3) +- [Aman Sharma](https://github.com/amanshharma) +- [Phani Harish](https://github.com/phaniharish) +- [Eric Boyle](https://github.com/moodzyy) +- [Martin Zamarski](https://github.com/momom88) +- [Ayush Khandelwal](https://github.com/thegaribguy) +- [Rocky Liao](https://github.com/SeemsRocky) +- [Saylee Pradhan](https://github.com/sayleepradhan) +- [Mohamed Shiha](https://github.com/MohamedShiha) +- [Alexandros Kalamaras](https://github.com/akalamaras) +- [Raul Valdez](https://gitub.com/raulvaldez4) +- [elgaspar](https://github.com/elgaspar) +- [Purvi Patel](https://github.com/ppatel6) +- [cleverinx](https://github.com/cleverinx) +- [Carlos Herrera](https://github.com/carlosherrera1113) +- [ritikaaa17](https://github.com/ritikaaa17) +- [kjain22](https://github.com/kapil-jain123) +- [Samuel Fuller](https://github.com/samuelfuller01) +- [Ian Sherwood](https://github.com/eyesurewould) +- [Seungil Ahn](https://github.com/dkstm95) +- [Raghunandan M. A.](https://github.com/raghu-ma) +- [agtokty](https://github.com/agtokty) +- [Torbjørn Bratland](https://github.com/tobratland) +- [NdengangEdwin](https://github.com/ndengangEdwin) +- [Mario Saputra](https://github.com/mariosaputra) +- [Caleb Taylor](https://github.com/sexling) +- [Shivang Goria](https://github.com/shivanggoria) +- [Kelvin Kamau](https://github.com/kelvinkamau) +- [Alex Anastassatos](https://github.com/aanastassatos) +- [Emil Hørlyck](https://github.com/eHorlyck) +- [Kenny Roekasa](https://github.com/KenRoekasa/) +- [Chris Li](https://github.com/VandyChris) +- [Seongmin Choi](https://github.com/sseongmi/) +- [Nikita Milovanov](https://github.com/nwnebel) +- [Bernard Kacprzak](https://github.com/Bernard-code) +- [Victor Lemos](https://github.com/grimmer10u) +- [Alessandro Munufie](https://github.com/alexmunu) +- [EricWang](https://github.com/bigbigDreamer) +- [Mrigank Dembla](https://github.com/mrigankdembla/) +- [Josh Prakke](https://github.com/JPrakke) +- [Dmitry Cherednikov](https://github.com/dcherednikov) +- [FélixHub](https://github.com/FelixHub) +- [Joel Lashrbook](https://github.com/jkl92) +- [Jason Klebes](https://github.com/jklebes) +- [Rishi Khanna](https://github.com/khannar62) +- [bjaxbjax](https://github.com/bjaxbjax) +- [keerthimohan93](https://github.com/keerthimohan93) +- [zer0tolerance](https://github.com/zer0tolerance) +- [al6625](https://github.com/alaj6625/first-contributions) +- [Vireak Sok](https://github.com/Vireak-Sok) +- [Yaron Lidengoltz](https://github.com/Yaron-Lidengoltz) +- [Xi Ming](https://github.com/seki2020) +- [Michael Properzi](https://github.com/erzimj) +- [Masahiro Okamoto](https://github.com/okamotchan) +- [Robiquet](https://github.com/Robiquet) +- [Rishabh Jain](https://github.com/jainrish) +- [Teresa Ingram](https://github.com/malteserteresa) +- [Ricardo Mondini](https://github.com/mondini) +- [codesquadkiki](https://github.com/codesquadkiki/) +- [Abhishek Pokhrel](https://github.com/abhishekpokhrel) +- [gullibility](https://github.com/gullibility/) +- [Milos Kostic](https://github.com/misa2) +- [Alex Pacheco](https://github.com/alexpa123) +- [xwind-h](https://github.com/xwind-h) +- [risingsmoke](https://github.com/risingsmoke) +- [Stephane Le Port](https://github.com/stleport) +- [Mikołaj Koszczyc](https://github.com/mikoszczyc) +- [Jed Mijares](https://github.com/jedmijares) +- [Zen Chong Lit Wei](https://github.com/lordzizzy) +- [Ashok Kumar](https://github.com/ashokkumar) +- [Onn Tai Yong](https://github.com/yongot) +- [Cinthia Barros](https://github.com/barroscinthia) +- [William Duvall](https://github.com/duvallwh) +- [Neel](https://github.com/spiyer99) +- [Tigran Harutyunyan](https://github.com/caboose008) +- [Jakub Banasik](https://github.com/jakubbanasik) +- [João Batista](https://github.com/JBDionisio) +- [Sam Matthews](https://github.com/FiendySam/) +- [Alec Bartley](https://github.com/tabbartley/) +- [Michael Zhao](https://github.com/michael-zhao) +- [Saim Farid](https://github.com/saimfd) +- [Washington Añasco](https://github.com/Washio1995) +- [Raul Ropero](https://github.com/codigoespagueti) +- [Brendan Gilet](https://github.com/Vehemence26) +- [Maosheng Tang](https://github.com/mshtang) +- [Karen White](https://github.com/karen-white) +- [Jono](https://github.com/EagleOne42) +- [Alexandru Săndulescu](https://github.com/alexsandulescu) +- [Dominika Malinowska](https://github.com/doma1991) +- [Andrei Ionita](https://github.com/Andrei-Ionita) +- [Liz Burton](https://github.com/lizbur10) +- [Jordan van Beijnhem](https://github.com/jordanvanbeijnhem) +- [Vidit Jain](https://github.com/viditjain5598) +- [Alejandro Gonzalez](https://github.com/thehumanlegion) +- [Nathan Huh](https://github.com/AmberLlama81) +- [NUX:PR](https://github.com/nuxpr) +- [Przemysław Pierzchałka](https://github.com/Websited/) +- [Yingrjimsch](https://github.com/Yingrjimsch) +- [Tom](https://github.com/PsiPhiTheta) +- [Santeri](https://github.com/sQnteri) +- [normyp](https://github.com/normyp) +- [Krishna Mohan](https://github.com/kmohan217gg) +- [Joydeep Tapaswi](https://github.com/tapaswimail) +- [Sandeepa AMCP](https://github.com/sandeepaamcp) +- [Olivier Nshimiye](https://github.com/Olivier-rw) +- [Jesrapo](https://github.com/jesrapo) +- [Dmitriy Makarov](https://github.com/dmxich) +- [Moayad Badawi](https://github.com/moayad-badawi) +- [Adam Stolarczyk](https://github.com/apm30) +- [Bonnie Brown](https://github.com/brownbonnie) +- [Swaraj Dehuri](https://github.com/darkknight27) +- [Bassem - NextGLabs](https://github.com/nextglabs) +- [Raghid Elewa](https://github.com/relewa) +- [Abhishek Mohite](https://github.com/astroncoda) +- [Saullo Carvalho](https://github.com/saullocarvalho) +- [Darshan Patidar](https://github.com/darshanpatidar1) +- [Rai Santosh](https://github.com/Gitsanto) +- [Lionel Voirol](https://github.com/lionelvoirol) +- [Foris Tale](https://github.com/ForisTale) +- [jonaro00](https://github.com/jonaro00) +- [Petar Trbos](https://github.com/Petar-T) +- [Ildarov](https://github.com/Devit951) +- [Irfan Rafif](https://github.com/mirfanrafif) +- [Rahul Anand](https://github.com/RahulGo8u) +- [Julio Alvarado](https://github.com/JulioJoulesAlvarado) +- [Parkash Pant](https://github.com/parkashpant) +- [Sci-Phy](https://github.com/Sci-Phy) +- [Ryan Redburn](https://github.com/RyanRedburn) +- [Ryan Oliveira](https://github.com/Ryoliveira) +- [Przemek Orechwa](https://https://github.com/PrzeOr82) +- [Oliver Fenn](https://github.com/OliverFenn) +- [Zanoni Contreras](https://github.com/zamboni86) +- [Łukasz Pasek](https://github.com/lukaszpasek) +- [Patrick Uzuwe](https://github.com/puzuwe) +- [James Miller](https://github.com/JamesMMiller) +- [SolalC](https://github.com/SolalC) +- [Lee Wei Gen](https://github.com/weigenie/) +- [Landon Ferguson](https://github.com/LandonFerg/) +- [R F](https://github.com/kubr2017) +- [Daniel Cavalcanti](https://github.com/danielcti) +- [Akshat Katiyar](https://github.com/YellowFoxH4XOR) +- [Harsimran Singh](https://github.com/harsimran17) +- [Luiz Felipe Domingues](https://github.com/lfsando) +- [Hardy Xu](https://github.com/xuxin3101) +- [penpenpng](https://github.com/penpenpng) +- [Jasmine Tracey](https://github.com/traceyjas) +- [Zeyu Keith Fu](https://github.com/ZeyuKeithFu) +- [Hary Kwon](https://github.com/Harry-Kwon) +- [Drew Sommer](https://github.com/apsommer) +- [Fengqing(Aaron) Liu](https://github.com/rangermix) +- [Ahmet Ö](https://github.com/oeah2) +- [dlikas](https://github.com/dlikas) +- [Drake Gens](https://github.com/drakegens) +- [Dave Holly](https://github.com/daveholly57) +- [Nic Vigil](https://githib.com/nicvigil) +- [Luke Kuo](https://github.com/DarkGoomba) +- [Bruno Cezani](https://githib.com/bcezani) +- [Jaime R](https://github.com/JaimeRado) +- [Gabriel Silva](https://github.com/GOBDS) +- [Campelo Guedes](https://github.com/campeloguedes) +- [Zyjin](https://github.com/Zygen360) +- [Tiago Maia](https://github.com/tiagomvf) +- [Yunfei Jing](https://github.com/yunfeijing) +- [Rafal Grzyb](https://github.com/Grzybotron) +- [sotajensede](https://github.com/sotajensede) +- [peterp](https://github.com/peterp) +- [Juan Belieni](https://github.com/juanbelieni) +- [Louis Michael](https://github.com/Louis-Michael) +- [Sokratis Kouimtzidis](https://github.com/sokratix) +- [doesnotcompute420](https://github.com/doesnotcompute420) +- [Jose Ramon Martinez](https://github.com/JRamonMC) +- [yea678](https://github.com/yea678) +- [Beth Ackerman](https://github.com/betheackers) +- [FcKoOl](https://github.com/FcKoOl) +- [Edmund Lewry](https://github.com/EdmundLewry) +- [Janne Ilonen](https://github.com/JanneIlonen) +- [Zizy Zhu](https://github.com/zuzy) +- [Kenny McEwan](https://github.com/kennymce) +- [Leonard Green](https://github.com/laroygreen) +- [kingkoma](https://github.com/kingkoma) +- [AlexSarah](https://github.com/AlexSarah) +- [Ahmad Samy](https://github.com/sunshine2050) +- [Raghu Lohe](https://github.com/raghulohe) +- [Lv Zhi](https://github.com/Na0ture) +- [Vyner](https://github.com/Vyner) +- [Fakhruddin Tahery](https://github.com/ftahery) +- [scw248](https://github.com/scw248) +- [Abhilash Kuhikar](https://github.com/abhikuhikar) +- [Hayes](https://github.com/hazer888) +- [Pankil Kalra](https://github.com/pankilkalra10) +- [1F0](https://github.com/1f0) +- [Yuvansh Agrawal](https://github.com/yuvag) +- [lahla81](https://github.com/lahla81) +- [Dhananjay](https://github.com/dhanoz) +- [bekahh](https://github.com/bekahh) +- [Jeffrey Hui](https://github.com/jeffrey-hui) +- [PerfectDay20](https://github.com/PerfectDay20) +- [Levon Ar](https://github.com/LevonAr) +- [el mamado](https://github.com/el-mamado) +- [Priyanka Kariya](https://github.com/tishakariya) +- [Araminta Robertson](https://github.com/minta98) +- [Summerok](https://github.com/Summerok) +- [vskwirblies](https://github.com/vskwirblies) +- [Andrew Heilman](https://github.com/heilmanandrew) +- [Kerry Jackson](https://github.com/kerryja) +- [Eric Hackman](https://github.com/kwesihackman) +- [Bobby K.](https://github.com/BobbyKarabinakis) +- [Shantanu Chandorkar](https://github.com/Chromares) +- [Frédéric Thévenon](https://github.com/fredericthevenondev) +- [Christian Bauer](https://github.com/MyGodItsFull0fStars) +- [Calen Robinette](https://github.com/calenrobinette) +- [Guen Jargalsaikhan](https://github.com/guen0610) +- [Kevin Dowling](https://github.com/tellikakneezus) +- [HappyCappybara](https://github.com/happycappybara) +- [c0dr7](https://github.com/c0dr7) +- [Arham Abiyan](https://github.com/arham09) +- [Archit Kulkarni](https://github.com/architkulkarni) +- [James Ortiz](https://github.com/James1515) +- [Jake Zhang](https://github.com/zjk97) +- [Fabio Trinidad](https://github.com/Ftrinidad2) +- [Ikaika Alo](https://github.com/ikaikadev) +- [Kurtis Knodel](https://github.com/TheArchitect4855) +- [Mathew George](https://github.com/killerontherun1) +- [Holtek](https://github.com/Holtek) +- [Turpster](https://github.com/Turpster) +- [Lian De Ho](https://github.com/LDHo) +- [jaroot](https://github.com/jaroot32) +- [ceheiss](https://github.com/ceheiss) +- [diksub](https://github.com/dikisubagja) +- [maizedaniele](https://github.com/maizedaniele) +- [VirtualVasquez](https://github.com/VirtualVasquez) +- [DJ Johnson](https://github.com/DonaldJamesJohnson) +- [Zach Rudy](https://github.com/zcr7948) +- [Faial](https://github.com/fabfas) +- [Alex White](https://github.com/alex-wh) +- [Shruti Raj](https://github.com/Sparkla) +- [Mithun Madhav](https://github.com/mithunmqb) +- [Wahaj Ayub](https://github.com/WahajAyub) +- [Jun Wang](https://github.com/friforever) +- [Henry Starman](https://github.com/hfstarman) +- [Swapnanil Pathak](https://github.com/swapnanilpathak) +- [Srivathsa](https://github.com/Soapdemon) +- [Sathish Thiyagarajan](https://github.com/sathish-t) +- [Ananthalakshmi Sankar](https://github.com/anu294) +- [Fabian Mesias](https://github.com/ifmr24) +- [ThankGod Ofurum](https://github.com/tcofurum) +- [Ross Wilkinson](https://github.com/rgwilkin) +- [michaelrdt](https://github.com/MichaelRDT) +- [MichaelB](https://github.com/Nessfreak75) +- [Anwar Saad](https://github.com/nuarneuer20) +- [mitran](https://github.com/mitran1580) +- [shailaja22](https://github.com/shailaja22) +- [acmsundar](https://github.com/acmsundar) +- [HarishST](https://github.com/HarishSTOnline) +- [Kenneth Matuszewski](https://github.com/kmatusze13) +- [Lana](https://github.com/lanaabirached) +- [Lige Williamson](https://github.com/Lige-w) +- [CarlosOGM](https://github.com/CarlosOGM) +- [Keiran Glynn](https://github.com/KeiranGlynn) +- [Danilo Zabala II](https://github.com/dczii) +- [KK998](https://github.com/KK998) +- [Owen Eribo](https://github.com/oweneribo) +- [Daniel Stankovic](https://github.com/DanielStankovic) +- [BBrown](https://github.com/BBrown4) +- [Jim Armstrong](https://github.com/41northstudios) +- [AdamThahir](https://github.com/AdamThahir) +- [Julia González](https://github.com/yuliagg) +- [Jim Schlader](https://github.com/jamesschlader) +- [Jacob Pieczynski](https://github.com/jacobpie) +- [AbdulMuqeeth Mohammed](https://github.com/abdulmuqeeth) +- [Virag Umathe](https://github.com/viragumathe5) +- [Kyle Morris](https://github.com/assimil0) +- [Murphy Yip](https://github.com/mfmyip) +- [Ezechio](https://github.com/ezechio) +- [Lily Chen](https://github.com/liliburg711) +- [Cameron Faust](https://github.com/CameronAFaust) +- [Sam McRuvie](https://github.com/SamMcRuvie) +- [Thomas Dimnet](https://github.com/tdimnet) +- [Danny Vim](https://github.com/DannyVim) +- [James McDonald](https://github.com/jmcdona1d) +- [Priyank Patel](https://github.com/patel-priyank) +- [Hassan Elseoudy](https://github.com/Hassan-Elseoudy) +- [Titus Wen](https://github.com/wen372) +- [Toni Blackwelder](https://github.com/toni517b) +- [Takeen Evens](https://github.com/TakiiCoder) +- [Ian Stubbs](https://github.com/Stubbs-Ian) +- [Minhaz Alam](https://github.com/M1NH42) +- [Desmond Qiu](https://github.com/dqiuwq) +- [Moonil Son](https://github.com/und32g2ound-kr) +- [David Norris-Hill](https://github.com/dnorrishill) +- [Riccardo Di Benedetto](https://github.com/dibericky) +- [Brian De Sousa](https://github.com/briandesousa) +- [Mazhar Ali Baig](https://github.com/mazharalibaig) +- [Anish](https://github.com/sai9100957575) +- [alib28](https://github.com/alib28) +- [Mitali Purwar](https://github.com/MitaliPurwar21) +- [Teyjattt](https://github.com/Teyjattt) +- [DonClaveau3](https://github.com/DonClaveau3) +- [viamarie77](https://github.com/viamarie77) +- [dystar](https://github.com/dystar) +- [stephenjwinn](https://github.com/stephenjwinn) +- [Arjav Garg](https://github.com/arjav2002) +- [asura4716](https://github.com/asura4716) +- [VictorMartinelli](https://github.com/Victor-martinelli) +- [Jisu Lee](https://github.com/lee195) +- [Shaun Watson](https://github.com/ShaunWatson24) +- [Adrian](https://github.com/adrsolheim) +- [Giancarlo Bacci](https://github.com/bacci) +- [Sharat Chandar M](https://github.com/SharatChandar) +- [Ryan Hardin](https://github.com/RyanHardin) +- [Oleg Zinin](https://github.com/OlegZinin) +- [Alvin Tang](https://github.com/alvintang) +- [Kevin Chen](https://github.com/KeChing) +- [Ashford Hill](http://github.com/ashfordhill) +- [Abhinav Gupta](https://github.com/abhinvgupta/) +- [Vincent Tern](https://github.com/vincenttern) +- [Patrick Carty](https://github.com/pcarty92) +- [Alejandro Marco](http://amisdoinghisbest.com) +- [Rajarajan Balasubramanian](https://github.com/rajarajanb) +- [Dominik Petrovic](https://github.com/nixxcode) +- [Chakradhar Koppula](https://github.com/ckoppula199) +- [Jang Ho Cho](https://github.com/jhc95/) +- [Shea Buckner](https://github.com/towhitch) +- [machao](https://github.com/McSources) +- [dudakp](https://github.com/dudakp/) +- [Michael Luo](https://github.com/michaeljluo) +- [Nolan Baldwin](https://github.com/NBALWDIN18) +- [Salma Amr](https://github.com/SalmaAmrAhmed) +- [Adrian Cruz](https://github.com/ainzacruz) +- [Olcay Karaduman](https://github.com/olckara) +- [sonianuj287](https://github.com/sonianuj287) +- [mushBrainDave](https://github.com/mushBrainDave) +- [Ryan Andrew Sibat](https://github.com/ryaaanandrew) +- [bazmoz](https://github.com/bazmoz) +- [JayZal](https://github.com/jayzal) +- [Sayem Wani](https://github.com/SayemW) +- [William Spruyt](https://github.com/SayemW) +- [Eternal Rift](https://github.com/EternalRift) +- [Luke Colpo](https://github.com/lukecolpo/first-contributions) +- [Alan da Matta](https://github.com/alandamatta) +- [Ameya Joshi](https://github.com/joshiameya99) +- [Maksat Hanja](https://github.com/maxathanja) +- [Przem Wierzbicki](https://github.com/przemwierzbicki) +- [Bradley Delgado](https://github.com/Brakeo) +- [grzegorzgit](https://github.com/grzegorzgit) +- [divanshu](https://github.com/ddivanshu) +- [SudeepaGo](https://github.com/SudeepaGo) +- [Star](https://github.com/yabdyli) +- [Joseph Spinelli](https://github.com/joespinelli7) +- [Vince Grilli](https://github.com/VinceGrilli) +- [Farhat SH](https://github.com/farhatcode) +- [David Gutierrez-McCormack](https://github.com/davidmccormack) +- [Joachim Miens](https://github.com/jojo58fr) +- [M Farhad](https://github.com/imfarhad) +- [Aaron Deane](https://github.com/aarondeane) +- [Joseph Gattuso](https://github.com/josephgattuso) +- [hrj](https://github.com/1170300812) +- [lucasebs](https://github.com/lucasebs) +- [Joao](https://github.com/Joaopedrobass) +- [Ishita Bardhan](https://github.com/IshitaB28) +- [Max Brooks](https://github.com/maxbrooks114) +- [Dheeraj Agrawal](https://github.com/dka72/) +- [Ramesh Mamidala](https://github.com/rameshmamidalaa/) +- [Piotr Gargula](https://github.com/pgagula) +- [hrj](https://github.com/1170300812) +- [lucasebs](https://github.com/lucasebs) +- [Joao](https://github.com/Joaopedrobass) +- [Selvaa](https://github.com/selvaa3009) +- [Tobias Wirtz](https://github.com/tobiaswirtz) +- [Janko Bosnjakovic](https://github.com/jb-99) +- [Andres Garcia](https://github.com/belsierre) +- [Alexander Maldonado](https://github.com/maldonado75) +- [Trent Bosak](https://github.com/bosaktrent) +- [Iftakhar Alam Rizve](https://github.com/Iftakharalamrizve) +- [Nanthakarn limkool](https://github.com/ZEZAY) +- [Bishnu Murmu](https://github.com/bishnumurmu) +- [Sergey Rudenko](https://github.com/rudensergey) +- [Ron Mallory](https://github.com/RonMallory) +- [Joseph Ng](https://github.com/ktng91) +- [@brownesc](https://github.com/brownesc) +- [Chaitanya Sama](https://github.com/chaitanyasama) +- [Charlyp](https://github.com/charlespierru) +- [Myron Liu](https://github.com/myron-liu) +- [wet-dog](https://github.com/wet-dog) +- [Brian Joo](https://github.com/brianhjoo) +- [Odafe](https://github.com/od41) +- [Ramesh Joshi](https://github.com/rjoshig) +- [Yulian Karapetkov](https://github.com/yuliankarapetkov) +- [Gustavo Maeda](https://github.com/nihil1911) +- [Amos Mwangi](https://github.com/AmosMwangi) +- [Bob Wilson](https://github.com/bwilson753) +- [wmorian](https://github.com/wmorian) +- [Jordi van Dooren](https://github.com/jordivandooren) +- [Bridget Chew](https://github.com/bchew3) +- [Miffy Chen](https://github.com/miffycs) +- [Yiğit Anış](https://github.com/yigitanis) +- [Noah Elliott](https://github.com/2l2t) +- [Mervin Ng](https://github.com/m6ng) +- [run me](https://github.com/run-me) +- [Erez Ben Said](https://github.com/erezbens) +- [Sajal Verma](https://github.com/sajalverma17) +- [Arpit Pandey](https://github.com./arpitansu) +- [Nicholas Anderson](https://github.com/nicoisaverage) +- [Jeffrey Verlyn Johnson](https://github.com/verlyn13) +- [Conor Gaughan](https://github.com/conor-gaughan) +- [Arpit Pandey](https://github.com./arpitansu) +- [Deanna Thompson](https://github.com/deannathompson) +- [Stephanie Stevens](https://github.com/lekaceleb) +- [Saurabh kumar](https://github.com/LuGO0) +- [Brian Walter](https://github.com/bigbwalter) +- [Allen Colston](https://github.com/colstona1024) +- [Brandon Nguyen](https://github.com/branch331) +- [Afroz Chakure](https://github.com/afrozchakure) +- [Matt Reeder](https://github.com/reedermatthew5) +- [Jared Vandeventer](https://github.com/jvandy83) +- [Jarret Jheng Ch'ng](https://github.com/jchng) +- [Prasanth Maddali](https://github.com/mprasanth) +- [Luis G. Martinez 🇸🇻🤔](https://github.com/LGerMa) +- [R. Henriquez](https://github.com/arghen) +- [Coner Murphy](https://github.com/conermurphy) +- [Kang InSeob](https://github.com/dlstjq7685) +- [anandfnc](https://github.com/anandfnc) +- [PerceptionD](https://github.com/PerceptionD) +- [Gacut](https://github.com/Gacut) +- [Wladyslaw](https://github.com/Graidaris) +- [Zoheb Rahiman](https://github.com/rahiman-zoheb) +- [Andrew Bellucci](https://github.com/imbellucci) +- [Tomas](https://github.com/Tomheza) +- [Juan Francisco Kurucz](https://github.com/juanfkurucz) +- [Rupinder Kaur](https://github.com/RupKaur2001) +- [Twumasi Pennoh](https://github.com/twumasipennoh) +- [DiligentDisaster](https://github.com/DiligentDisaster) +- [Christopher Chmielewski](https://github.com/ChristopherChmielewski) +- [Heinrich Malan](https://github.com/heinrichmalan) +- [abudawud](https://github.com/abudawud) +- [David Azael Bernal](https://github.com/davidazael) +- [Lydia Velasquez](https://https://github.com/lydiarachel) +- [Kevin Huber](https://github.com/itskev) +- [Monio](https://github.com/monio) +- [Eric Jorgensen](https://github.com/theericjorgensen) +- [striker4150](https://github.com/striker4150) +- [Huiyoung Hyun Jung](https://github.com/hyunhjung) +- [Jayesh Kumar](https://github.com/deepcnnlearning) +- [Amanda Bakalarczyk](https://github.com/elbhednam) +- [MisterHup](https://github.com/MrHup) +- [Evan Bruchet](https://github.com/EBruchet) +- [mskaprushchenko](https://github.com/mskarpushchenko) +- [Ray Rojas](https://github.com/lokcito) +- [Lucas Bergmann](https://github.com/bergmannlucas) +- [Janine Prukop](https://github.com/JaninePrukop) +- [Jefferson Chen](https://github.com/chenjefferson) +- [Murat Ahmet Korkmaz](https://github.com/ahmetkorkmaz3) +- [Arzyon](https://github.com/Arzyon) +- [Alex H](https://github.com/afhare/) +- [Martin Carles](https://github.com/martincarles) +- [Rian Schmit](https://github.com/Rian-Schmit) +- [Austin Blandford](https://github.com/ABlandford) +- [Brendan Cleveland](https://github.com/BCleveland) +- [Antonio Adame](https://github.com/aadame3311) +- [Anwar Saad](https://github.com/nuarneuer20) +- [Tien Cu](https://github.com/TieCu) +- [Primal System Studio](https://github.com/PrimalSystemStudio) +- [Nitin Gogna](https://github.com/ni3gogna) +- [Swarnagowri Bhambore](https://github.com/swarnagowri) +- [Brandon Mitchell](https://github.com/brandontmitchell) +- [Jacky Lin](https://github.com/clin113jhu) +- [Tyler Crites](https://github.com/zebbzz) +- [Sina Kabki](https://github.com/sinacodes95) +- [LelPel](https://github.com/lelpel) +- [Katherine Landry](https://github.com/kburckin) +- [Abel Nam](https://github.com/inema) +- [Chris Quevedo](https://github.com/christopherQuevedo) +- [Shihab uddin](https://github.com/shihabuddinbuet) +- [Jose Bejerano](https://github.com/bejerano) +- [Madeline Kelly](https://github.com/MadelineKelly196) +- [Keon Ghadamyari](https://github.com/keongh) +- [Josh Carroll](https://github.com/joshc133) +- [Henish Patel](https://github.com/henishpatel) +- [Remie Malik](https://github.com/remiemalik) +- [Rishiraj Purohit](https://github.com/rishirajpurohit) +- [Tyler John](https://github.com/tyjohn134) +- [Ankita Kaushik](https://github.com/ankitakaushik) +- [David Jahng](https://github.com/djahng) +- [Azhar Anwar](https://github.com/iamazhar) +- [Juan Carlos Munoz Calle](https://github.com/Dubstepic) +- [Alexander Santos](https://github.com/ronkiro) +- [Shreevatsa N](https://github.com/vatsa287) +- [Schnell Theo](https://github.com/Elsasser67) +- [Kirk Lennon](https://github.com/kirklennon) +- [Phil H.](https://github.com/kungfuphil) +- [EswarR](https://github.com/EswarR99) +- [Tong Jin](https://github.com/tjin35) +- [Sayaka Ono](https://github.com/SayakaOno) +- [Avantikaa](https://github.com/Avantikaa) +- [qiaojun](https://github.com/qiaojun2016) +- [jinhokong](https://github.com/jinhokong) +- [Matthew Kerlin](https://github.com/MerlinGoneSuperSaiyan) +- [Miguel Magana](https://https://github.com/miguelmagana) +- [Divya Nayal](https://github.com/divyanayal) +- [Shikha Shah](https://github.com/shikha-812) +- [chakMan](https://github.com/187107363) +- [TusharT](https://github.com/TusharT) +- [Michael Gill](https://github.com/gill984) +- [Andy Liu](https://github.com/AndyLiuCodes) +- [Lauren Partin](https://github.com/hensleyl4) +- [Steven Delaney](https://github.com/sddelaney) +- [Madusudhanan Bairappan](https://github.com/madhusona) +- [Jake Kwon](https://github.com/FoxeyesJK) +- [OmkarLubal](https://github.com/omkarlubal/) +- [SarahOBrien](https://github.com/sarahob) +- [Sanil Sinai Borkar](https://github.com/sanilborkar) +- [MrCrit](https://github.com/MrCrit) +- [gbs4ever](https://github.com/gbs4ever) +- [Zezhengw Wu](https://github.com/Sec-ant) +- [Nick Pula](https://github.com/npula) +- [CeciliaP.](https://github.com/ceci99pb) +- [Junwon Jung](https://github.com/jw3329) +- [Ansh](https://github.com/root-ansh) +- [Nick LiBassi](https://github.com/nlibassi) +- [Liam Lee](https://github.com/mappyliam) +- [loozy5331](https://github.com/loozy5331) +- [Koda Gabriel](https://github.com/kodagabriel) +- [Adam Yeager](https://github.com/theyeag) +- [Adam Yeager](https://github.com/krakenschloss-adamyeager) +- [Kenny Togunloju](https://github.com/kennybky) +- [Marchand Benjamin](https://github.com/marchandbenjamin) +- [Venkat Korrapati](https://github.com/vk3305) +- [Mairon DaSilva](https://github.com/MaironD) +- [Azmain Adel](https://github.com/azmainadel) +- [Itay Gershman](https://github.com/ItayGershman) +- [Rakibuzzaman Rahat](https://github.com/sleipnir029) +- [yiyalo](https://github.com/yiyalo) +- [Sarah AlMutairi](https://github.com/sara13js) +- [EDWIN BONI OIGO](https://github.com/oigoedwin) +- [Adam Smith](https://github.com/adamphilipsmith) +- [Rudy Summers](https://github.com/rudysummers) +- [fengtan zhang](https://github.com/Geek-Zft) +- [donovanope](https://github.com/donovanope) +- [Doris Verria](https://github.com/dorisverria) +- [Ola Frankowska](https://github.com/ofrankowska) +- [Narongrit Unwerawattana](https://github.com/kicito) +- [Furkan K.](https://github.com/mfurkankara) +- [Elizandra Dalpra](https://github.com/ElizandraDalpra) +- [Wes Roberson](https://github.com/wesrob21) +- [Darxper](https://github.com/darxper) +- [Nghokeng Daniel](https://github.com/dani-gouken) +- [Barbara Washington](https://github.com/silverbright) +- [Jannisko](https://github.com/jannisko/) +- [rick lacerte](https://github.com/ricklacerte) +- [Namolab](https://github.com/namolab) +- [nickfiggins](https://github.com/nickfiggins) +- [Roger T](https://github.com/RogerT22) +- [Asad Butt](https://github.com/asdal) +- [Ron Gaza](https://github.com/fugarza) +- [Nihal Pandey](https://github.com/stark019) +- [Alex Parra](https://github.com/alex-parra) +- [Chris Lewis](https://github.com/Ryu1284) +- [Martin Watkins](https://github.com/martinw13) +- [Simon Larsen](https://github.com/DeterjoSimon) +- [Kagawa23](https://github.com/kagawa23) +- [ZanderBE](https://github.com/ZanderBE) +- [Ankit Kumar](https://github.com/NotAnkit) +- [malworks](https://github.com/malworks/) +- [Gouty](https://github.com/Gouty) +- [AndyCE](https://github.com/AndyCE) +- [samhauer](https://github.com/samhauer) +- [Boomly](https://github.com/Boomly) +- [tjalsdud](https://github.com/tjalsdud89) +- [NatanStec](https://github.com/NatanStec) +- [Kenneth Nguyen](https://github.com/KennethNguyen) +- [keojo](https://github.com/keojo) +- [hunterdanielson](https://github.com/hunterdanielson) +- [bilgehannevruz](https://github.com/bilgehannevruz) +- [TanujRohatgi](https://github.com/TanujRohatgi) +- [DarkAEther](https://github.com/DarkAEther) +- [KleinDevDE](https://github.com/KleinDevDE) +- [Lee Butler](https://github.com/vxsunstriderxv) +- [Harvey Breaux](https://github.com/hbreauxv) +- [Eric Jansen](https://github.com/EricJ90) +- [SirPawle](https://github.com/PawleN-D) +- [Kristiyan Todorov](https://github.com/krisScript) +- [Enrique Ramos](https://github.com/enramos) +- [kilroyjones](https://github.com/kilroyjones/) +- [leoperegrino](https://github.com/leoperegrino) +- [abbasafzal10](https://github.com/abbasafzal10) +- [Kamil Serafinowicz](https://github.com/Seraphimus) +- [Bjornsbot](https://github.com/bjornsbot) +- [Abhishoya Lunavat](https://github.com/shoydex23) +- [Stéphane Dreyfus](https://github.com/stephanedreyfus) +- [Jasper](https://github.com/japzio) +- [Lalit Khatri](https://github.com/Lalit-Kumar-Khatri) +- [Verum Emanio](https://github.com/VerumEmanio) +- [Jianxing Ke](https://github.coom/kjr21362) +- [Ivan Sousa](https://github.com/0gener) +- [Eran Nave](https://github.com/erannave) +- [Saran Sappa](https://github.com/saransappa) +- [Susan Maas](https://github.com/susanmaas) +- [Pedro Veríssimo](https://github.com/pbv2) +- [Chua Kaixin](https://github.com/ChuaKaixin) +- [Ismail Vohra](https://github.com/ismailvohra) +- [Howard Jiang](https://github.com/hjiang4332) +- [Anna Sherlock](https://github.com/alsherlock) +- [Jordan Stubblefield](https://github.com/jstubb7939) +- [Rajendrasinh Parmar](https://github.com/RajendrasinhParmar) +- [Muktadir Khan](https://github.com/muktadirkhan889) +- [Cod3rx](https://github.com/coderx7) +- [Andy Rohde](https://github.com/AndrewPRohde) +- [Sawsan A](https://github.com/saleryan) +- [gerosprime](https://github.com/gerosprime) +- [Marcao F](https://github.com/mackmak/) +- [RN2208](https://github.com/rn2208/) +- [prakx87](https://github.com/prakx87/) +- [Schitiz](https://github.com/Schitiz) +- [AdeLaNa](https://github.com/AdeLana-O) +- [karlangadas](https://github.com/karlangadas) +- [Gleycer Parra](https://github.com/gleycerparra) +- [arnav35](https://github.com/arnav35) +- [Kyle Moreira](https://github.com/NotKharon/) +- [D Lincoln](https://github.com/da-lincoln) +- [Chris P](https://github.com/j393554) +- [Ela Bogucka](https://github.com/ebogucka) +- [Paolo Manili](https://github.com/Delta-38) +- [Hvassaa](https://github.com/Hvassaa) +- [Gustavo Silva](https://github.com/gstvds) +- [Sofia Rivas](https://github.com/sofiarivas) +- [Blaine Bateman](https://github.com/eafpres) +- [Satyajit](https://github.com/BBBS92) +- [Juliana Almeida](https://github.com/julinvictus) +- [Sarawut Klangphukhiao](https://github.com/sarawukl) +- [Jens L](https://github.com/PretentiousPanda) +- [Futuregit](https://github.com/futuregit) +- [Matt Nelson](https://github.com/Matthew-Nelson) +- [TonyTheTiger323/Tony Greeley](https://github.com/tonythetiger323) +- [Stenout](https://github.com/stenout) +- [Jangrie](https://github.com/jangrie) +- [Andrew Limaru](https://github.com/andr3wll) +- [Chuk Robertson](https://github.com/chukrobertson) +- [Vishwanath Joshi](https://github.com/vishnitin) +- [Vishnu Sharma](https://github.com/vish198910) +- [WxBDM](https://github.com/WxBDM) +- [Faraz Khan](https://github.com/Frk4) +- [Samrat19](https://github.com/samrat19) +- [theNaavik](https://github.com/theNaavik) +- [vincent](https://github.com/vincentcvr6) +- [Vinicius Philot](https://github.com/vphilot) +- [Calum Chamberlain](https://github.com/CalumChamberlain) +- [franzqat](https://github.com/franzqat) +- [Rugved](https://github.com/rugved) +- [LahirukaWijesinghe](https://github.com/lahirukawijes) +- [Sagar Datta](ttps://github.com/sagar-datta) +- [John Curcio](https://github.com/johncurcio) +- [Nikho Sagala](https://github.com/nikhosagala) +- [Dilina Dehigama](https://github.com/dilinade) +- [Miyuru Thathsara](https://github.com/MiyuruThathsara) +- [Gord Bolli](https://github.com/gbolli) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000000..6f3f30997c9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) 2016 - present Roshan Jossey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000000..5ca78f604cb --- /dev/null +++ b/README.md @@ -0,0 +1,181 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +It's hard. It's always hard the first time you do something. Especially when you are collaborating, making mistakes isn't a comfortable thing. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what's better than actually doing the stuff in a practice environment? This project aims at providing guidance & simplifying the way beginners make their first contribution. If you are looking to make your first contribution, follow the steps below. + +#### *If you're not comfortable with command line, [here are tutorials using GUI tools.]( #tutorials-using-other-tools )* + +#### *Read this in [other languages](translations/Translations.md).* + +[:bangladesh:](translations/README.bn.md) +[🇧🇬](translations/README.bg.md) +[🇧🇷](translations/README.pt_br.md) +[](translations/README.ca.md) +[🇨🇳](translations/README.chs.md) +[🇨🇿](translations/README.cs.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇪🇬](translations/README.eg.md) +[🇪🇸](translations/README.es.md) +[🇫🇷](translations/README.fr.md) +[🏴](translations/README.gl.md) +[🇬🇷](translations/README.gr.md) +[🇭🇺](translations/README.hu.md) +[🇮🇩](translations/README.id.md) +[🇮🇱](translations/README.hb.md) +[🇮🇳](translations/Translations.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇮🇹](translations/README.it.md) +[🇯🇵](translations/README.ja.md) +[🇰🇪](translations/README.kws.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇱🇹](translations/README.lt.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇲🇰](translations/README.mk.md) +[🇲🇽](translations/README.mx.md) +[🇲🇾](translations/README.my.md) +[🇳🇱](translations/README.nl.md) +[🇳🇬](translations/README.igb.md) +[🇳🇴](translations/README.no.md) +[🇳🇵](translations/README.np.md) +[🇵🇭](translations/README.tl.md) +[](translations/README.en-pirate.md) +[🇵🇰](translations/README.ur.md) +[🇵🇱](translations/README.pl.md) +[🇵🇹](translations/README.pt-pt.md) +[🇷🇺](translations/README.ru.md) +[🇸🇦](translations/README.ar.md) +[🇸🇪](translations/README.se.md) +[:slovakia:](translations/README.slk.md) +[:slovenia:](translations/README.sl.md) +[🇹🇭](translations/README.th.md) +[🇹🇷](translations/README.tr.md) +[🇹🇼](translations/README.cht.md) +[🇺🇦](translations/README.ua.md) +[🇻🇳](translations/README.vn.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇱🇻](translations/README.lv.md) +[GUJ](translations/README.guj.md) + + + +fork this repository + +If you don't have git on your machine, [install it]( https://help.github.com/articles/set-up-git/). + +## Fork this repository + +Fork this repository by clicking on the fork button on the top of this page. +This will create a copy of this repository in your account. + +## Clone the repository + +clone this repository + +Now clone the forked repository to your machine. Go to your GitHub account, open the forked repository, click on the clone button and then click the *copy to clipboard* icon. + +Open a terminal and run the following git command: + +``` +git clone "url you just copied" +``` +where "url you just copied" (without the quote marks) is the url to this repository (your fork of this project). See the previous steps to obtain the url. + +copy URL to clipboard + +For example: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +where `this-is-you` is your GitHub username. Here you're copying the contents of the first-contributions repository on GitHub to your computer. + +## Create a branch + +Change to the repository directory on your computer (if you are not already there): + +``` +cd first-contributions +``` +Now create a branch using the `git checkout` command: +``` +git checkout -b +``` + +For example: +``` +git checkout -b add-alonzo-church +``` +(The name of the branch does not need to have the word *add* in it, but it's a reasonable thing to include because the purpose of this branch is to add your name to a list.) + +## Make necessary changes and commit those changes + +Now open `Contributors.md` file in a text editor, add your name to it. Don't add it at the beginning or end of the file. Put it anywhere in between. Now, save the file. + +git status + + +If you go to the project directory and execute the command `git status`, you'll see there are changes. + + +Add those changes to the branch you just created using the `git add` command: + +``` +git add Contributors.md +``` + +Now commit those changes using the `git commit` command: +``` +git commit -m "Add to Contributors list" +``` +replacing `` with your name. + +## Push changes to GitHub + +Push your changes using the command `git push`: +``` +git push origin +``` +replacing `` with the name of the branch you created earlier. + +## Submit your changes for review + +If you go to your repository on GitHub, you'll see a `Compare & pull request` button. Click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://firstcontributions.github.io/#social-share). + +You could join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in the web app](https://firstcontributions.github.io/#project-list). + +### [Additional material](additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutorials Using Other Tools + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App|IntelliJ IDEA| +|---|---|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)|[IntelliJ IDEA](github-windows-intellij-tutorial.md)| diff --git a/additional-material/git_workflow_scenarios/Useful-links-for-further-learning.md b/additional-material/git_workflow_scenarios/Useful-links-for-further-learning.md new file mode 100644 index 00000000000..9eb79981701 --- /dev/null +++ b/additional-material/git_workflow_scenarios/Useful-links-for-further-learning.md @@ -0,0 +1,36 @@ +# Useful Links + +This document is dedicated to all the tips and tricks websites, blog posts, and helpful sites that make our lives easier. They are a great reference to serve all of our needs, be it a beginner or an expert. This page should act as an index of all those useful links that would help everybody who is new in the open-source domain or someone who wants to learn more. + +## The List +1. [Interactive tutorial to git](https://try.github.io) +2. [git - the simple guide](http://rogerdudler.github.io/git-guide/) +3. [On undoing, fixing, or removing commits in git](http://sethrobertson.github.io/GitFixUm/fixup.html) +4. [Git and GitHub tutorial translated to many languages](https://github.com/Roshanjossey/first-contributions) +5. [Merge Conflicts](https://www.git-tower.com/learn/git/ebook/en/command-line/advanced-topics/merge-conflicts) +6. [Resolving Merge Conflicts](https://githowto.com/resolving_conflicts) +7. [Basics of Git - The Simple Quick Start Guide](https://blog.praveen.science/basics-of-git-the-quick-start-guide/) +8. [Git Standards followed in our way of Spotify Agile Methodology](https://blog.praveen.science/git-standards-followed-in-our-way-of-spotify-agile-methodolgy/) +9. [Git Shortcuts](https://blog.praveen.science/git-shortcuts/) +10. [Official Git cheat sheet in many languages](https://services.github.com/on-demand/resources/cheatsheets) +11. [Git cheat sheet from Tower](https://www.git-tower.com/learn/cheat-sheets/git) +12. [Common Git Problems](https://www.codementor.io/citizen428/git-tutorial-10-common-git-problems-and-how-to-fix-them-aajv0katd) +13. [Git Rebase](https://blog.gitprime.com/git-rebase-an-illustrated-guide/) +14. [Beginner's Guide to Rebasing and Squashing](https://github.com/servo/servo/wiki/Beginner%27s-guide-to-rebasing-and-squashing) +15. [Git Cheatsheet that shows correlations between commands and files](http://ndpsoftware.com/git-cheatsheet.html) +16. [How to contribute](https://opensource.guide/how-to-contribute/) +17. [Getting started with Open Source](https://github.com/OpenSourceHelpCommunity/Getting-Started-With-Contributing-to-Open-Sources) +18. [How to contribute](https://github.com/freeCodeCamp/how-to-contribute-to-open-source) +19. [Atlassians Git Tutorials](https://www.atlassian.com/git) +20. [Pull request reviews](https://help.github.com/articles/about-pull-request-reviews/) +21. [Another Interactive tutorial for git](https://learngitbranching.js.org/) +22. [Git commandline cheat-sheet](https://gist.github.com/davfre/8313299) +23. [Programming Books](https://github.com/EbookFoundation/free-programming-books) +24. [E-Book of professional tip and secrets](https://goalkicker.com/GitBook/GitProfessionalTipsSecrets.pdf) +25. [tutorial about simple rules of become git professional](https://medium.freecodecamp.org/follow-these-simple-rules-and-youll-become-a-git-and-github-master-e1045057468f) +26. [A Note About Git Commit Messages](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) +27. [5 Useful Tips For A Better Commit Message](https://thoughtbot.com/blog/5-useful-tips-for-a-better-commit-message) +28. [Version Control using Git](https://ourcodingclub.github.io/2017/02/27/git.html) +29. [Version Control with Git](https://www.udacity.com/course/version-control-with-git--ud123) + +Keep adding more links, that you find helpful. diff --git a/additional-material/git_workflow_scenarios/additional-material.md b/additional-material/git_workflow_scenarios/additional-material.md new file mode 100644 index 00000000000..5d3a9b16ae6 --- /dev/null +++ b/additional-material/git_workflow_scenarios/additional-material.md @@ -0,0 +1,46 @@ +# Additional information + +We assume that you have already finished with the basic tutorial before coming here. This document will give you some additional information about advanced Git techniques. + +### [Amending a commit](amending-a-commit.md) +This document provides information about how to amend a commit on the remote repository. +> Use this when you need to adjust a commit you made. + +### [Configuring git](configuring-git.md) +This document provides information about how to configure user details and other options in git. +> Use this to better control your git configurations. + +### [Keeping your fork synced with the repository](keeping-your-fork-synced-with-this-repository.md) +This document provides information about how to keep your forked repository up-to-date with the base repository. This is important, as hopefully you and many others will contribute to the project. +> Follow these steps if your fork doesn't have any changes in parent repository. + +### [Moving a Commit to a different Branch](moving-a-commit-to-a-different-branch.md) +This document provides information about how to move a Commit to another Branch. +> Take these steps to move a commit to another branch. + +### [Removing a File](removing-a-file.md) +This document provides information about how to remove a file from your local repository. +> Follow these steps to learn how to remove a file prior to a commit + +### [Removing a branch from your repository](removing-branch-from-your-repository.md) +This document provides information about how to delete a branch from your repository. +> Only do these steps after your pull request get's merged. + +### [Resolving Merge Conflicts](resolving-merge-conflicts.md) +This document provides information about how to resolve merge conflicts. +> Take these steps to resolve the annoying merge conflicts. + +### [Reverting a commit](reverting-a-commit.md) +This document provides information about how to revert a commit on the remote repository. It will come in handy in case you need to undo a commit that has already been pushed to Github. +> Take these steps if you want to reverse a commit. + +### [Squashing Commits](squashing-commits.md) +This document provides information about how to squash commits with an interactive rebase. +> Use this if you want to open a PR in an open source project and the reviewer asks you to squash every commit into one, with an informative commit message. + +### [Undo-ing a local commit](undoing-a-commit.md) +This document provides information about how to undo a commit on your local repository. This is what you need to do when you feel you've messed up your local repository and wish to reset the local repository. +> Take these steps if you want to undo/reset a local commit. + +### [Useful Links](Useful-links-for-further-learning.md) +This document is dedicated to all the tips and tricks websites, blog posts, and helpful sites that make our lives easier. They are a great reference to serve all of our needs, be it a beginner or an expert. This page should act as an index of all those useful links that would help everybody who is new in the open-source domain or someone who wants to learn more. diff --git a/additional-material/git_workflow_scenarios/amending-a-commit.md b/additional-material/git_workflow_scenarios/amending-a-commit.md new file mode 100644 index 00000000000..6ae5608c38d --- /dev/null +++ b/additional-material/git_workflow_scenarios/amending-a-commit.md @@ -0,0 +1,48 @@ +# Amending a Commit + +What if you commit a change to your remote repository only to realize later that you have a typo in the commit message or you forgot to add a line in your most recent commit. +How do you edit that? This is what this tutorial covers. + +## Changing a recent commit message after you have pushed to Github. +To do this without opening a file: +* Type in the ```git commit --amend -m "followed by your new commit message"``` +* Run ```git push origin ``` to commit the changes to the repository. + +Note: If you type in just ```git commit --amend```, your text editor would open up prompting you to edit the commit message. +Adding the ``-m`` flags prevents it. + +## Modifying on a single commit + +So, what if we forgot to make a minor change to a file like changing a single word and we have already pushed the commit to our remote repository? + +To illustrate here is a log of my commits: +``` +g56123f create file bot file +a2235d updated contributor.md +a5da0d modified bot file +``` +Let's say I forgot to add a single word to the bot file + +There are 2 ways to go about this. The first is to have an entirely new commit that contains the change like so: +``` +g56123f create file botfile +a2235d updated contributor.md +a5da0d modified botfile +b0ca8f added single word to botfile +``` +The second way is to amend the a5da0d commit, add this new word and push it to Github as one commit. +The second sounds better since it is just a minor change. + +To achieve this, we would do the following: +* Modify the file. In this case, I will modify the botfile to include the word I omitted previously. +* Next, add the file to the staging area with ```git add ``` + +Usually after adding files to the staging area, the next thing we do is git commit -m "our commit message" right? +But since what we want to achieve here is to amend the previous commit, we would instead run: + +* ```git commit --amend``` + This would then bring up the text editor and prompt you to edit the message. You can decide to leave the message as it was before or change it. +* Exit the editor +* Push your changes with ```git push origin ``` + +That way, both changes would be in one single commit. diff --git a/additional-material/git_workflow_scenarios/configuring-git.md b/additional-material/git_workflow_scenarios/configuring-git.md new file mode 100644 index 00000000000..26902bed16b --- /dev/null +++ b/additional-material/git_workflow_scenarios/configuring-git.md @@ -0,0 +1,76 @@ +# Configuring git + +The first time you tried to commit using git, you might have gotten a prompt like the one below: + +```bash +$ git commit +*** Please tell me who you are. + +Run + +git config --global user.email "you@example.com" +git config --global user.name "Your Name" + +to set your account's default identity. +Omit --global to set the identity only in this repository. +``` + +Git needs to know who you are when you create a commit. When you are working collaboratively, you should be able to see who modified what parts of the project and when, and thus, git has been designed to create commits tied to a name and an email. + +There are multiple ways to provide the `git commit` command with your email and name, and we'll go through some of them below. + +### Global Config + +When you store something in the global config, it is accessible system wide in all the repositories you work on. This is the preferred way and works for most use cases. + +To store something in the global config, you use the `config` command as follows: + +`$ git config --global ` + +In the case of user details, we run it as follows: + +``` +$ git config --global user.email "you@example.com" +$ git config --global user.name "Your Name" +``` + +### Repository Config + +As the name says, these configurations are scoped to your current repository. If you want to commit to a particular repository, say, a work related project, with your company's email, then you could use this method. + +To store something in the repository config, you use the `config` command by emitting the `--global` flag as follows: + +`$ git config ` + +In the case of user details, we run it as follows: + +``` +$ git config user.email "you@alternate.com" +$ git config user.name "Your Name" +``` + +### Command-line Config + +These type of configurations are scoped to the current command only. All git commands take `-c` arguments before the action verb to set temporary configuration data. + +To store something in the command line config, run your command as follows: + +`$ git -c = -c = ` + +In our example, we would run the commit command as follows: + +`git -c user.name='Your Name' -c user.email='you@example.com' commit -m "Your commit message"` + +### Note on Precedence + +Among the three methods described here, the precedence order is `command-line > repository > global`. This means that, if a variable is configured in the command-line as well as globally, the command-line value would be used for the operation. + +## Beyond User Details + +We have dealt with only the user details till now while working with the config. However, there are several other configuration options available. Some of them are: + +1. `core.editor` - to specify the name of the editor used for writing commit messages, etc. +2. `commit.template` - to specify a file on the system as the initial commit template. +3. `color.ui` - to specify a boolean value for using colors in git's output. + +We have abstracted some details for ease of understanding. For further reading, head over to [git-scm.com](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration). diff --git a/additional-material/git_workflow_scenarios/keeping-your-fork-synced-with-this-repository.md b/additional-material/git_workflow_scenarios/keeping-your-fork-synced-with-this-repository.md new file mode 100644 index 00000000000..ff454b14bea --- /dev/null +++ b/additional-material/git_workflow_scenarios/keeping-your-fork-synced-with-this-repository.md @@ -0,0 +1,40 @@ +# Keeping your fork synced with this repository + +First, the flow for a full sync should be understood, which is important. In this schema, there are 3 different repos: my public repo on Github `github.com/firstcontributions/first-contributions.git`, your fork of the repo on GitHub `github.com/Your-Name/first-contributions/` and your local machine's repo from which you are suppose to work. This kind of cooperation is typical for open source projects and called `Triangle Workflows`. + +triangle workflow + +To keep your two repos up-to-date with my public repo, we first have to fetch and merge the public repo with your local machine's repo. +Our second move will be to push your local repo to your GitHub fork. As you've seen earlier, it's only from your fork that you can ask for a "pull request". So your GitHub fork is the last repo to be updated. + +Now, let's see how to do it: + +First, you must be on your master branch. To know which branch you are on, check the first line of: +``` +git status +``` +if you are not already on master: +``` +git checkout master +``` + +Then you should add my public repo to your git with `add upstream remote-url`: +``` +git remote add upstream https://github.com/firstcontributions/first-contributions.git +``` +This is a way of telling git that another version of this project exists in the specified url and we're calling it `upstream`. Once your git has a name let's fetch the latest version of the public repository: +``` +git fetch upstream +``` + +You've just fetched the latest version of my fork (`upstream` remote). Now, you need to merge the public repository into your master branch. +``` +git rebase upstream/master +``` +Here you're merging the public repository with your master branch. Your local machine's master branch is now up-to-date. Lastly, if you push your master branch to your fork, your GitHub fork will also have the changes: +``` +git push origin master +``` +Notice here you're pushing to the remote named `origin`. + +So by now or at this point, all your repositories are up-to-date. Well done! You should do this, everytime your GitHub repo tells you that you are a few commits behind. diff --git a/additional-material/git_workflow_scenarios/moving-a-commit-to-a-different-branch.md b/additional-material/git_workflow_scenarios/moving-a-commit-to-a-different-branch.md new file mode 100644 index 00000000000..d9059061799 --- /dev/null +++ b/additional-material/git_workflow_scenarios/moving-a-commit-to-a-different-branch.md @@ -0,0 +1,25 @@ +# Moving a commit to a different branch +What if you commit a change, and then realize that you committed to a different branch? +How can you change that? This is what this tutorial covers. + +## Moving the latest commits to an existing branch +To do this, type: + +```git reset HEAD~ --soft``` - Undoes the last commit, but leave the changes available. +```git stash``` - Records the state of the directory. + +```git checkout name-of-the-correct-branch``` - Switches to another branch. +```git stash pop``` - Removes latest stashed state. +```git add .``` - Or try adding individual files. +```git commit -m "your message here"``` - Saves and Commits the changes. + +Now your changes are on the correct branch + + +### Moving the latest commits to a new Branch +To do this, type: +```git branch newbranch``` - Creates a new Branch. Saving all the Commits. +```git reset --hard HEAD~#``` - Move master back by # commits. Remember, these commits will be gone from master +```git checkout newbranch``` - Goes to the branch you created. It will have all the commits. + +Remember: Any changes not committed will be LOST. diff --git a/additional-material/git_workflow_scenarios/removing-a-file.md b/additional-material/git_workflow_scenarios/removing-a-file.md new file mode 100644 index 00000000000..b155a06df1a --- /dev/null +++ b/additional-material/git_workflow_scenarios/removing-a-file.md @@ -0,0 +1,23 @@ +# Removing a file from Git + +Sometimes, you may want to remove a file from Git but not delete it from your computer. You can achieve this by using the following command: + +``git rm --cached`` + +## So what happened? + +Git will no longer keep track of changes in the removed file. As far as Git knows, it's as if you had deleted the file. If you were to locate the file in your file system, you will notice that it's still there. + +Notice that in the example above, the flag `--cached` is used. If we didn't add this flag, Git will remove the file from not just the repo, but from your file system too. + +If you commit the change with `git commit -m "Remove file1.js"` and pushed it to the remote repository using `git push origin master`, the remote repository will remove the file. + +## Additional features + +- If you want to remove more than one file, you can include them all in the same command: + + `git rm file1.js file2.js file3.js --cached` + +- You can use a wildcard (*) to remove similar files. For example, if you would like to remove all .txt files from your local repository: + + `git rm *.txt --cached` diff --git a/additional-material/git_workflow_scenarios/removing-branch-from-your-repository.md b/additional-material/git_workflow_scenarios/removing-branch-from-your-repository.md new file mode 100644 index 00000000000..e65eea7f3e3 --- /dev/null +++ b/additional-material/git_workflow_scenarios/removing-branch-from-your-repository.md @@ -0,0 +1,31 @@ +# Remove a branch from your repository + +If you have followed the tutorial up-to-now, our `` branch has finished its purpose, it is time to delete it from your local machine's repo. This isn't necessary, but the name of this branch shows its rather special purpose. Its life can be made correspondingly short. + +First, let's merge your `` to your master, so to go to your master branch: +``` +git checkout master +``` + +Merge `` to master: +``` +git merge master +``` + +Remove `` on your local machine's repo: +``` +git branch -d +``` + +You have now deleted your local machine's `` branch and everything looks neat and tidy. +Though, at this point, you should still have the `` branch in your GitHub fork. However, before you delete this, remember that you have sent a "Pull request" to my repo from this remote branch. So unless I've already merged it, don't delete this branch. + +However, if I have merged your branch and you want to delete the remote branch, use: +``` +git push origin --delete +``` + +Now, you know how to tidy your branches. +With time, many commits will be added to my public repo. And the master branches of your local machine and of your GitHub fork won't be up-to-date. So in order to keep your repositories synchronized with mine, follow the steps below. + +#### [Keeping your fork synced with the repository](keeping-your-fork-synced-with-this-repository.md) diff --git a/additional-material/git_workflow_scenarios/resolving-merge-conflicts.md b/additional-material/git_workflow_scenarios/resolving-merge-conflicts.md new file mode 100644 index 00000000000..dbe8a09e0f6 --- /dev/null +++ b/additional-material/git_workflow_scenarios/resolving-merge-conflicts.md @@ -0,0 +1,35 @@ +# What is a merge conflict? + +When you try to merge another branch into your current working branch, you are taking changes from another context and combining them with your current working files. +If two people have changed the same lines in the same file, or if one person decided to delete it while the other person decided to modify it, Git cannot identify which is the correct version. Git will then mark the file as having a conflict - which you'll have to resolve before you can continue your work. + +# How to resolve a merge conflict? + +When faced with a merge conflict, git will mark the problematic area in the file by enclosing it in “<<<<<<<< HEAD” and “>>>>>>>>>>[other branch name]” + +The contents after the first marker originate from your current working branch. After the angle brackets, Git tells us where (from which branch) the changes came from. A line with "=======" separates the two conflicting changes. +Our job is now to clean up these lines: when we're done, the file should look exactly as we want it to look. It is advisable to consult the teammate who wrote the conflicting changes to decide which version should be final. It could be either on of yours - or maybe a mixture between the two. + +e.g. : +``` + <<<<<<< HEAD:mergetest + This is my third line + ======= + This is a fourth line I am adding + >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:mergetest +``` + +`<<<<<<<`: Indicates the start of the lines that had a merge conflict. The first set of lines are the lines from the file that you were trying to merge the changes into. +`=======`: Indicates the break point used for comparison. Breaks up changes that user has committed (above) to changes coming from merge (below) to visually see the differences. +`>>>>>>>`: Indicates the end of the lines that had a merge conflict. + +You resolve a conflict by editing the file and then manually merging the parts of the file that git had trouble merging. This may mean discarding either your changes or someone else's or going ahead with a mix of the two. You will also need to delete the '<<<<<<<', '=======', and '>>>>>>>' in the file. + + +Once you have resolved the conflict do a `git add`. Do not forget to run the tests, as you have to make sure that you have resolved the conflict. + +You can also download different plugins depending on the IDE you are using for an easier way to resolve merge conflicts. + + +# How to undo a merge? +If you want to undo a merge then you can do `git merge —abort` diff --git a/additional-material/git_workflow_scenarios/reverting-a-commit.md b/additional-material/git_workflow_scenarios/reverting-a-commit.md new file mode 100644 index 00000000000..762f73a08d3 --- /dev/null +++ b/additional-material/git_workflow_scenarios/reverting-a-commit.md @@ -0,0 +1,41 @@ +# Revert a commit + +To revert a commit simply means to create a brand new commit that undoes all +the changes made in a previous one. It is like doing a ```CTRL + Z ``` on git. + +Reversion is made easier in git because every commit you push to your remote repository has a unique alphanumeric key known as SHA(Secure Hash Algorithm) tied to it. +So this means you can revert any commit as long as you have the SHA. +But then, you have to be careful to reverse orderly so as not to mess your repository up. + + +To pick out the SHA of the specific commit we want to undo, a log of all the commits we have made so far would come in handy. +To get this, we would run the command: +```git log --oneline ``` +Running the ```git log``` command alone would also give us the SHAs (in long form) +However using the ```--oneline ``` flag tells git that we want it displayed in a concise (one line) manner for easy read. + +The first 7 characters displayed when you run this command is called the abbreviated commit hash. + +For example, here is what I get when I run ```git log --oneline ``` on this repository: +``` +389004d added spacing in title +c1b9fc1 Merge branch 'master' into tutorials +77eaafd added tutorial for reverting a commit +``` + +So this shows that with ```git log --oneline```, we can fetch a list of all the commits made on the repository together with the first 7 characters of its SHA. + +Now, Let's assume I want to undo my commit of "added spacing in title", here are the steps I would take: + +* Copy the SHA of the commit which, in this case is ```389004d``` +* Then, run the command ```git revert 389004d``` + +This would pop open my text editor and prompt me to edit the commit message. +You can decide to leave the commit message as the default git message which starts with the word `Revert` +or you can also decide to customize the message to your liking. + +* Next, I will save and close the text editor. +* Return to the command line. +* Run ```git push origin ``` to push the reverted changes to Github. + +And that is it, the change would be undone. In this case, my repository would be reverted to how it looked like in ```c1b9fc1``` diff --git a/additional-material/git_workflow_scenarios/squashing-commits.md b/additional-material/git_workflow_scenarios/squashing-commits.md new file mode 100644 index 00000000000..b31cc3b04ed --- /dev/null +++ b/additional-material/git_workflow_scenarios/squashing-commits.md @@ -0,0 +1,86 @@ +# What is squashing? + +In git, squashing refers to rewriting the history of your commits, so you end up with one commit with a description of the changes done. +It's usually done in open source projects because a lot of the history of a branch in open source projects is only relevant to the developer who created it, and this provides a simpler way to describe the changes made and also revert them if needed. + +# How do you squash commits? + +First, perform a git log to review the commits you would like to merge in your current branch. + +``` +git log +``` + +You should see a series of your commits like so: + +``` +commit blablabla +Author: omguhh +Date: 10/10/20 + Commit message 1 + +commit blablabla2 +Author: omguhh +Date: 10/10/20 + Commit message 2 +``` + +So now that you see the commits you wish to merge to one, we can move along into doing that with ```git rebase```. Assuming you're already familiar with ```git rebase```, we can starting squashing commits in the interactive mode of git rebase that you can activate like so: + +``` +git rebase -i +``` + +Now, with interactive rebasing you can specify the starting and end point of how far back you want to go with commits like so: + +``` +git rebase -i HEAD~2 +``` + +Running this command will show you something like the following: + +``` +pick blablabla Changing test01.txt file +pick blablabla2 Adding dummy01.txt file + +# +# Commands: +# p, pick = use commit +# r, reword = use commit, but edit the commit message +# e, edit = use commit, but stop for amending +# s, squash = use commit, but meld into previous commit +# f, fixup = like "squash", but discard this commit's log message +# x, exec = run command (the rest of the line) using shell +# +# These lines can be re-ordered; they are executed from top to bottom. +# +# If you remove a line here THAT COMMIT WILL BE LOST. +# +# However, if you remove everything, the rebase will be aborted. +# +# Note that empty commits are commented out +``` + +So if you want to squash ```blablabla2``` into ```blablablabla```, you would change the following : + +``` +pick blablabla Changing test01.txt file +squash blablabla2 Adding dummy01.txt file + +``` + +If all goes well, you'd get a result that looks like this: + +``` +# This is a combination of 2 commits. +# The first commit's message is: +commit message 1 + +# This is the 2nd commit message: + +commit message 2 +``` + +That you can freely change before you decide to exit the editor to save these changes. + +Running git log again should show you the commit message you entered before exiting the screen with the commits combined into one. diff --git a/additional-material/git_workflow_scenarios/stashing-a-file.md b/additional-material/git_workflow_scenarios/stashing-a-file.md new file mode 100644 index 00000000000..f071823e501 --- /dev/null +++ b/additional-material/git_workflow_scenarios/stashing-a-file.md @@ -0,0 +1,137 @@ +# Stashing + +What if you are working on a big code and suddenly you need to switch the branch from which you are currently working on to some other branch. Since the code, is not complete, and without any tests, you probably don't want to commit it. But you cannot move to the other branch without committing the changes, Git won't let you break this flow. What do we do then? How do we prevent an unnecessary commit, while being able to jump branches? This is what this tutorial covers. + +## Stashing your work + +Let's assume you are working on a project's branch where you have changed some files. Now if you run ```git status``` you can see your changes in the files. + +``` +$ git status +# On branch master +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: index.html +# +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: lib/simplegit.rb +# +``` + +Now you want to switch your branch, but don't want to commit the changes yet; so you would stash the changes. +To push a new stash on to your stack, run ```git stash```: + +``` +$ git stash +Saved working directory and index state \ + "WIP on master: 049d078 added the index file" +HEAD is now at 049d078 added the index file +(To restore them type "git stash apply") +``` + +Now your working directory is clean, use ```git status``` : + +``` +$ git status +# On branch master +nothing to commit, working directory clean +``` + +Now you can switch to any branch and do your work; your stashed changes are stored in form of a stack. To see which stashes you have stored in the stack you can use ```git stash list```: + +``` +$ git stash list +stash@{0}: WIP on master: 049d078 added the index file +stash@{1}: WIP on master: c264051 Revert "added file_size" +stash@{2}: WIP on master: 21d80a5 added number to log +``` + +In case you want to re-apply the changes you just stashed, you can use the command ```git stash apply```. By using this command you can reapply the most recent stashed file. In order to reapply any other file, you can specify it by naming it like: ```git stash apply ```, in place of `````` write the name of the stash you need to reapply. + +``` +$ git stash apply +# On branch master +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: index.html +# modified: lib/simplegit.rb +# +``` + +You can see that git re-modifies the file that you uncommitted when you saved the stash. In this case, you had a clean working directory when you tried to apply the stash, and you tried to apply it on the same branch you saved it from; but having a clean working directory and applying it on the same branch aren’t necessary to successfully apply a stash. You can save a stash on one branch, switch to another branch later, and re-apply the changes in the new branch. You can also have modified and uncommitted files in your working directory when you apply a stash, git gives merge conflicts if anything no longer applies cleanly. + +The changes made to your files are reapplied, but the file you staged was not restaged. To do so you need to run the command ```git stash apply``` with a ```--index``` to tell the command to reapply the staged changes. If you have run that instead, you would have returned to your original position: + +``` +$ git stash apply --index +# On branch master +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: index.html +# +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: lib/simplegit.rb +# +``` + +The apply command only applies the stashed work, but you still have that on your stack. In order to remove it, you can run ```git stash drop``` with the name of the stash to remove. + +``` +$ git stash list +stash@{0}: WIP on master: 049d078 added the index file +stash@{1}: WIP on master: c264051 Revert "added file_size" +stash@{2}: WIP on master: 21d80a5 added number to log +$ git stash drop stash@{0} +Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43) +``` + +You can use ```git stash pop``` to un-stash the last changes drop it from your stash's stack. + +## Un-applying a Stash + +In some cases you want to apply stashed changes, do some work, but up-apply the changes that originally came from the stash. Git does not provide command like ```git unapply```, but it is possible to achieve this effect by simply retrieving the patch associated with a stash and applying it in reverse: + +```$ git stash show -p stash@{0} | git apply -R``` + +Again if you don't specify a stash, Git assumes the most recent stash: + +```$ git stash show -p | git apply -R``` + +You may want to create an alias and effectively add a ```stash-unapply``` command to your Git. For example: + +``` +$ git config --global alias.stash-unapply '!git stash show -p | git apply -R' +$ git stash apply +$ #... work work work +$ git stash-unapply +``` + +## Creating a Branch from Stash + +If you stash some work, leave it there for a while, and continue on the branch from which you stashed the work, you may have a problem reapplying the work. If the apply tries to modify a file that you’ve since modified, you’ll get a merge conflict and will have to resolve it. If you want an easier way to test the stashed changes again, you can run ```git stash branch```, which creates a new branch for you, checks out the commit you were on when you stashed your work, reapplies your work there, and then drops the stash if it applies successfully: + +``` +$ git stash branch testchanges +Switched to a new branch "testchanges" +# On branch testchanges +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: index.html +# +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: lib/simplegit.rb +# +Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359) +``` + +This is a nice shortcut to recover stashed work easily and work on it in a new branch. \ No newline at end of file diff --git a/additional-material/git_workflow_scenarios/undoing-a-commit.md b/additional-material/git_workflow_scenarios/undoing-a-commit.md new file mode 100644 index 00000000000..0dff8c4ed5f --- /dev/null +++ b/additional-material/git_workflow_scenarios/undoing-a-commit.md @@ -0,0 +1,55 @@ +# Undo local commits + +To undo a local commit, all you need to do is +``` +git reset +``` +This command will reset your staging area to your most recent commit, but the changes you made to your working directory will not change. So, you can still re-commit again what you've changed. +Or, if you only want to remove one file from your previous commit. Then, you can do the command below +``` +git reset +``` +The command will remove only the specified file from the staging area, but changes made on the file will still remain. + +Example of ```git reset``` usage +``` +# Make changes in index.php and tutorial.php +# Add files into the staging area +$ git add . +# Remembered both files need to be committed separately +# Unstage tutorial.php +$ git reset tutorial.php +# Commit index.php first +$ git commit -m "Changed index.php" +# Commit tutorial.php now +$ git add tutorial.php +$ git commit -m "Changed tutorial.php" +``` + +Let's say if you have messed up your local repository and you just want to reset it to your last commit. +Then, you can run the command below. +``` +git reset --hard +``` +The command will not only reset your staging area, but also revert all your changes on the files to your last commit. +The mode ```--hard``` tells Git to undo all the changes in the working directory too. +You should only run this when you are really sure of throwing your whole local development out. + +Example of ```git reset --hard``` usage +``` +# Decided to start a crazy experiment +# Create a new file 'crazy.php' and add some code to it +# Commit crazy.php +$ git add crazy.php +$ git commit -m "Started a crazy dev" +# Edit crazy.php file again and changed a lot other files +# Commit all tracked files +$ git add . +$ git commit -m "Continued dev" +# Tested and things went out of hand +# Decided to remove the whole things +$ git reset --hard HEAD~2 +``` +The ```git reset --hard HEAD~2``` moves the current branch backward by 2 commit points in the same time reverting all changes you have made and remove the 2 snapshot we have just created from project history. + +P.s. Never perform ```git reset --hard``` if you've already pushed your commits to a shared repository as it will cause problems to everyone on that repository. diff --git a/additional-material/git_workflow_scenarios/why-using-branches.md b/additional-material/git_workflow_scenarios/why-using-branches.md new file mode 100644 index 00000000000..cfac1de6d0e --- /dev/null +++ b/additional-material/git_workflow_scenarios/why-using-branches.md @@ -0,0 +1,16 @@ + +# WHY USING BRANCHES DURING CONTRIBUTING + +Branches are simply pointers to a commit. + +When you branch out, git is essentially making a new state of your current code, upon which you can work, without affecting the important main state of the code (which is in master branch). + +When you are happy with your experiments, and want to merge you experiments in main code, you run git merge + master. + This will tell git, to add in all changes from your experiment branch into master. + + This way, while working in an open source project with a number of contributors, it becomes easy to merge the best suited code without altering the main code or master branch. + +If the question "Why do we use branching in version control like git?" still persists in your mind, here's a quick explanation: + +Let's take a simple example to understand the branching strategy. A production car needs a paint job before its launch. Prior to its official sale, it was decided that the car would come in 'olive green' color as default. But some of the members in the manufacturing team decided to showcase the car in 'red' color. Hence an ambiguous situation arises and to avoid this problem branching was introduced.The red color paint job is like a branch to the master repository 'Car'. Pushing this branch will suggest the red color. If merged with the master repository the car will get the red color otherwise it will continue with olive green. Merging a contributors branch to the master repo of the organization depends on the project head. diff --git a/additional-material/translations/additional-material.id.md b/additional-material/translations/additional-material.id.md new file mode 100644 index 00000000000..9759c4fae39 --- /dev/null +++ b/additional-material/translations/additional-material.id.md @@ -0,0 +1,46 @@ +# Informasi tambahan + +Kami berasumsi anda sudah menyelesaikan tutorial dasar sebelum datang ke sini. Informasi tambahan ini akan memberikan beberapa informasi mengenai teknik Git yang lebih tinggi. + +### [Hapus cabang dari repositori anda](removing-branch-from-your-repository.md) +Dokumen ini memberikan informasi mengenai bagaimana menghapus sebuah cabang dari repositori anda. +> Lakukan langkah ini setelah pull request anda digabungkan (merge). + +### [Agar fork anda tetap sinkron dengan repositori](keeping-your-fork-synced-with-this-repository.md) +Dokumen ini memberikan informasi mengenai bagaimana agar repositori yang kita fork tetap uptodate dengan repositori dasar. Hal ini penting, karena bisa jadi anda dan banyak kontributor lain berkontribusi dalam proyek tersebut. +> Ikuti langkah-langkahnya agar fork anda tidak punya banyak perubahan dengan repositori induk. + +### [Membatalkan commit](reverting-a-commit.md) +Dokumen ini memberikan informasi bagaimana caranya membatalkan commit di repositori remote. Langkah ini perlu jika sewaktu-waktu anda harus membatalkan sebuah commit yang telanjur sudah didorong ke GitHub. +> Ikuti langkah-langkahnya untuk membatalkan sebuah commit. + +### [Mengubah sebuah commit](amending-a-commit.md) +Dokumen ini memberikan informasi mengenai cara mengubah sebuah commit di repositori remote. +> Gunakan ini ketika kamu harus mengubah commit yang sudah dibuat. + +### [Membatalkan commit lokal](undoing-a-commit.md) +Dokumen ini memberikan informasi mengenai cara membatalkan sebuah commit di repositori lokal anda. Hal ini diperlukan ketika anda berpikir sudah merusak repositori lokal dan ingin me-reset repositori tersebut. +> Lakukan cara ini jika ingin membatalkan/reset commit di lokal. + +### [Mengatasi Merge Conflicts](resolving-merge-conflicts.md) +Dokumen ini memberikan informasi mengenai cara mengatasi saat terjadi konflik ketika melakukan merge. +> Lakukan langkah tersebut untuk mengatasi konflik merge yang mengganggu. + +### [Menghapus sebuah berkas](removing-a-file.md) +Dokumen ini memberikan informasi mengenai cara menghapus sebuah berkas dari repositori lokal. +> Ikuti langkah tersebut untuk mempelajari bagaimana menghapus sebuah berkas sebelum di-commit. + +### [Memindahkan Commit ke Cabang berbeda](moving-a-commit-to-a-different-branch.md) +Dokumen ini memberikan informasi mengenai cara memindahkan sebuah commit ke cabang lain. +> Ikuti langkah tersebut untuk memindahkan sebuah commit ke cabang lain. + +### [Mengonfigurasi git](configuring-git.md) +Dokumen ini memberikan informasi mengenai cara mengonfigurasi detil pengguna dan opsi lain di git. +> Gunakan langkah ini agar konfigurasi git anda menjadi lebih baik. + +### [Tautan bermanfaat](Useful-links-for-further-learning.md) +Dokumen ini didedikasikan untuk semua pos blog, laman yang sangat membantu, situs tip dan trik yang akan membuat hidup kita lebih mudah. Tautan tersebut tidak hanya untuk pemula, namun juga bagi yang sudah mahir. Halaman ini akan menjadi indeks untuk semua tautan yang bermanfaat yang mungkin saja bisa membantu siapapun yang baru terjun di dunia open-source atau siapapun yang ingin belajar lebih lanjut. + +### [Menyatukan banyak Commit](squashing-commits.md) +Dokumen ini menyediakan informasi mengenai bagaimana menyederhanakan banyak commit dengan rebase interaktif. +> Gunakan ini jika anda mau membuka sebuah PR dalam proyek open source dan periview meminta kamu untuk menyatukan setiap commit menjadi satu, dengan pesan commit yang informatif. diff --git a/additional-material/translations/additional-material.ko.md b/additional-material/translations/additional-material.ko.md new file mode 100644 index 00000000000..7a05ff539e6 --- /dev/null +++ b/additional-material/translations/additional-material.ko.md @@ -0,0 +1,42 @@ +# 추가 정보 + +여러분이 여기에 오기 전에 기본실습 과정을 이미 완료했다고 가정합니다. 이곳에서는 고급 Git 기술에 대한 정보를 제공합니다. + +### [여러분의 저장소에서 브랜치 삭제하기](removing-branch-from-your-repository.ko.md) +이 문서는 저장소에서 브랜치를 삭제하는 방법에 대한 정보를 제공합니다. +> PR(pull request) 요청이 병합 된 후에 본 단계를 수행하십시오. + +### [여러분이 포크한 저장소와 싱크상태 유지하기](keeping-your-fork-synced-with-this-repository.ko.md) +이 문서는 포크 된 저장소를 기본 저장소로 최신 상태로 유지하는 방법에 대한 정보를 제공합니다. 여러분과 다른 많은 사람들이 프로젝트에 기여하기를 바랍니다. +> 포크 된 상위 저장소가 변경되지 않은 경우 다음 단계를 수행하십시오. + +### [커밋 되돌리기](reverting-a-commit.ko.md) +이 문서는 원격 저장소에서 커밋을 되돌리는 방법에 대한 정보를 제공합니다. 이미 Github에 푸시 된 커밋을 되돌리려는 경우 유용합니다. +> 커밋을 되돌리려면 이 단계를 수행하십시오. + +### [커밋 수정하기](amending-a-commit.ko.md) +이 문서는 원격 저장소에서 커밋을 수정하는 방법에 대한 정보를 제공합니다. +> 당신이 만든 커밋을 수정해야 할 때 사용하십시오. + +### [로컬 커밋 되돌리기](undoing-a-commit.ko.md) +이 문서는 로컬 저장소에서 커밋을 실행 취소하는 방법에 대한 정보를 제공합니다. 로컬 저장소가 엉망이라고 느껴 당신이 로컬 저장소를 리셋하고자 할 때 당신이 해야 할 일입니다. +> 로컬 커밋을 취소하려면 이 단계를 수행하십시오. + +### [병합 충돌 해결하기](resolving-merge-conflicts.ko.md) +이 문서는 병합 충돌을 해결하는 방법에 대한 정보를 제공합니다. +> 이 단계를 수행하여 곤란한 병합 충돌을 해결하십시오. + +### [커밋을 다른 브랜치로 이동하기](moving-a-commit-to-a-different-branch.ko.md) +이 문서는 커밋을 다른 브랜치로 이동하는 방법에 대한 정보를 제공합니다. +> 이 단계를 수행하여 커밋을 다른 브랜치로 이동하십시오. + +### [git 설정하기](../configuring-git.md) +이 문서는 git에서 사용자 정보 및 기타 옵션을 구성하는 방법에 대한 정보를 제공합니다. +> git 설정을 더 잘 다루려면 이 단계를 수행하십시오. + +### [유용한 링크](../Useful-links-for-further-learning.md) +이 문서는 모든 블로그 게시물, 유용한 사이트, 유용한 정보 및 웹 사이트에 대한 내용을 담고 있습니다. 우리가 모든 필요를 위해 참조하는 것은 초심자 또는 전문가 일 것입니다. 이 페이지는 오픈 소스 도메인을 처음 접하거나 더 많은 것을 배우고자 하는 사람들을 돕는 지표 역할을 해야 합니다. + +### [스쿼시 커밋하기](../squashing-commits.md) +이 문서는 대화형 리베이스로 커밋을 스쿼시하는 방법에 대한 정보를 제공합니다. +> 오픈 소스 프로젝트에서 PR을 보낼 때 리뷰어가 모든 커밋을 하나로 스쿼시하도록 요청하는 경우 유익한 커밋 메시지와 함께 이것을 사용하십시오. diff --git a/additional-material/translations/additional-material.pt_br.md b/additional-material/translations/additional-material.pt_br.md new file mode 100644 index 00000000000..c93d6275114 --- /dev/null +++ b/additional-material/translations/additional-material.pt_br.md @@ -0,0 +1,46 @@ +# Informações Adicionais + +Nós imaginamos que você já tenha terminado o tutorial básico antes de vir aqui. As informações adicionais te darão algumas informações sobre técnicas mais avançadas de Git. + +### [Emendando um commit](../git_workflow_scenarios/amending-a-commit.md) +Esse documento provê informações sobre como emendar um commit no repositório remoto. +> Use isso quando você precisar ajustar um commit que você tenha feito. + +### [Configurando o git](../git_workflow_scenarios/configuring-git.md) +Esse documento provê informações sobre como configurar detalhes de usuário e outras opções do git. +> Use isso para melhor controlar as suas configurações do git. + +### [Mantendo o seu fork em sincronia com o repositório](../git_workflow_scenarios/keeping-your-fork-synced-with-this-repository.md) +Esse documento provê informações sobre como manter o seu fork atualizado com o repositório base. Isso é importante, já que se espera que você e muitas outras pessoas contribuem com o projeto. +> Siga esses passos se o seu fork não possui as mesmas alterações do repositório pai. + +### [Movendo um Commit para um Branch diferente](../git_workflow_scenarios/moving-a-commit-to-a-different-branch.md) +Esse documento provê informações sobre como mover um Commit para outro Branch. +> Siga esses passos para mover um commit para outro branch. + +### [Removendo um arquivo](../git_workflow_scenarios/removing-a-file.md) +Esse documento provê informações sobre como remover um arquivo do seu repositório local. +> Siga esses passos para aprender como remover um arquivo do seu repositório local. + +### [Removendo um Branch do seu repositório](../git_workflow_scenarios/removing-branch-from-your-repository.md) +Esse documento provê informações sobre como deletar um Branch do seu repositório. +> Apenas siga esses passos após o seu pull request ter sido mesclado. + +### [Resolvendo conflitos de Merge](../git_workflow_scenarios/resolving-merge-conflicts.md) +Esse documento provê informações sobre como resolver conflitos de Merge. +> Siga esses passos para resolver conflitos de Merge irritantes. + +### [Revertendo um commit](../git_workflow_scenarios/reverting-a-commit.md) +Esse documento provê informações sobre como reverter um commit feito no repositório remoto. Isso é muito útil quando você precisa desfazer um commit que tenha sido publicado no GitHub. +> Siga esses passos se você quiser reverter um commit. + +### [Comprimir Commits juntos](../git_workflow_scenarios/squashing-commits.md) +Esse documento provê informações sobre como esmagar commits juntos em um só realizando um rebase. +> Use esses passos se você quiser realizar um PR em um projeto open source e a pessoa que realizou o review pedir para você mesclar todos os commits em um só, com uma mensagem de commit informativa. + +### [Desfazendo um commit local](../git_workflow_scenarios/undoing-a-commit.md) +Esse documento provê informações sobre como desfazer um commit no seu repositório local. Isso é o que você precisa fazer quando você sente que fez alguma besteira no seu repositório e deseja desfazer. +> Take these steps if you want to undo/reset a local commit. + +### [Links úteis](../git_workflow_scenarios/Useful-links-for-further-learning.md) +Esse documento é dedicado a todos os blog posts, sites úteis, dicas e truques que fazem a nossa vida mais simples. Seja você um expert ou um iniciante, essa pagina deve servir como um index para todos esses links úteis para ajudar qualquer um que seja novo no mundo de projetos open-source ou alguém que queira prender mais a respeito. diff --git a/additional-material/translations/additional-material.ru.md b/additional-material/translations/additional-material.ru.md new file mode 100644 index 00000000000..522cd41ed28 --- /dev/null +++ b/additional-material/translations/additional-material.ru.md @@ -0,0 +1,46 @@ +# Дополнительная информация + +Здесь мы предполагаем, что вы уже освоили основную инструкцию. Дополнительная информация содержит некоторые сведения о GIT командах, необходимыж в более сложных ситуациях. + +### [Исправления в коммите](amending-a-commit.md) +Документ содержит информацию о том, как внести исправления в коммит в удаленном репозитории. +> Она необходима для тех случаев, когда вы хотите изменить коммит, который вы сделали ранее. + +### [Конфигурирование GITа](configuring-git.md) +Документ содержит сведния о том, как изменить информацию о пользователе и другие настройки GITа. +> Он будет полезен, если вы захотите сделать установки GITа более удобными. + +### [Синхронизация вашего ответвления с основным репозиторием](keeping-your-fork-synced-with-this-repository.md) +Документ рассказывает о том, как обеспечить синхронизацию вашего ответвления с основным репозиторием. Обеспечение синхронизации небходимо, так как, насколько можно надеяться, вы будете работать над проектом не в одиночестве, а вносить изменения в него, наряду с другими участниками. +> Выполните эти действия, если ваше ответвление не имеет изменений в master ветке репозитория. + +### [Перемещение коммита в другую ветку](moving-a-commit-to-a-different-branch.md) +Документ содержит сведения о том, как переместить коммит в другую ветку. +> Выполните указанные шаги, чтобы переместить коммит в другую ветку. + +### [Удаление файла](removing-a-file.md) +Документ описывает как удалить файл из вашего локального репозитория. +> Ознакомьтесь с этими командами чтобы понять как удалить файл перед тем, как сделать коммит. + +### [Удаление ветки из вашего репозитория](removing-branch-from-your-repository.md) +Документ содержит информацию о том, как удалить ветку из вашего репозитория. +> Используйте эти команды только после того, как ваш пул-реквест был удовлетворен. + +### [Разрешение конфликтов при слиянии веток](resolving-merge-conflicts.md) +Документ содержит информацию о том, как разрешать конфликты, возникающие при слиянии веток. +> Предложенные здесь шаги помогут вам разобраться с весьма неприятными случаями конфликтов возникающих при слиянии веток. + +### [Отмена коммита](reverting-a-commit.md) +Документ инструктирует как отменить коммит в удаленном репозитории. Такая операция будет полезна в тех случаях, когда вам необходимо отыграть назад тот коммит, который уже был послан на Github (pushed). +> Выполните указанные здесь шаги чтобы отменить коммит. + +### [Совмещение коммитов (squashing)](squashing-commits.md) +Документ описывает, как совмещать коммиты при помощи интерактивного перебазирования. +> Используйте эти инструкции, если вы создали пул-реквест в open source проекте, но эксперт проекта просит вас совместить все ваши коммиты в один коммит с содержательным комментарием. + +### [Отмена локального коммита](undoing-a-commit.md) +Документ информирует, как отыграть назад коммит в вашем локальном репозитории. Вам понадобится эта информация в том случае, если вы решите, что вы испортили ваш репозиторий и захотите вернуть его содержимое к первоначальному состоянию. +> Следуйте этим инструкциям, если вы хотите отменить те изменения, котрые были сделаны последним локальным коммитом. + +### [Полезные ссылки](Useful-links-for-further-learning.md) +Этот файл содержит ссылки на блог-посты, полезные веб-сайты, веб-сайты с перечислением рекоммендаций и приемов, которые часто облегчают нашу жизнь. Как начинающим, так и экспертам мы рекомендуем обращаться к ним по мере необходимости. Этот файл содержит список полезных линьков, которые наверняка помогут и тем, кто делает первые шаги в open source, и тем, кто захочет рассширить свои знания в этой области. \ No newline at end of file diff --git a/additional-material/translations/additional-material.sl.md b/additional-material/translations/additional-material.sl.md new file mode 100644 index 00000000000..57c1271e45b --- /dev/null +++ b/additional-material/translations/additional-material.sl.md @@ -0,0 +1,46 @@ +# Dodatne informacije + +Predvidevamo da ste že končali osnovni vodič. Sedaj boste dobili dodatne informacije o napredni uporabi Git-a. + +### [Popravljanje commita](amending-a-commit.sl.md) +Informacije o tem kako spremeniti commit v oddaljenem repositoryu. +> Uporabi, ko moraš spremeniti že narejeni commit. + +### [Nastavljanje Git-a](configuring-git.sl.md) +Informacije o tem kako nastaviti uporabnika in druge možnosti v Git-u. +> Uporabi za boljši nadzor nad svojo Git konfiguracijo. + +### [Kako imeti svojo različico sinhronizirano z oddaljenim repository-em](keeping-your-fork-synced-with-this-repository.sl.md) +Informacije o tem kako obdržati svojo različico v skladu z glavnim repository-em. To je pomembno, ker lahko veliko ljudi prispeva k projektu. +> Sledi tem korakom, če tvoja verzija nima nobenih sprememb v nadrejenem imeniku (parent directory). + +### [Premikanje commita v drugo vejo](moving-a-commit-to-a-different-branch.sl.md) +Informacije o tem kako premakniti commit v drugo vejo. +> Sledi tem korakom in premakni commit v drugo vejo. + +### [Odstranjevanje datoteke](removing-a-file.sl.md) +Informacije o tem kako odstraniti datoteko z svojega lokalnega repository-ja. +> Sledi tem korakom in odstrani datoteko pred commitom. + +### [Odstrani vejo s svojega repository-ja](removing-branch-from-your-repository.sl.md) +Informacije o tem kako zbrisati vejo s svojega repository-ja. +> Sledi tem korakom šele potem, ko je bil tvoj pull-request že združen. + +### [Razreševanje sporov pri združevanju](resolving-merge-conflicts.sl.md) +Informacije o tem kako razrešiti spore pri združevanju (resolve merge conflicts). +> Sledi tem korakom pri razreševanju nadležnih sporov pri združevanju. + +### [Povrnitev commita](reverting-a-commit.sl.md) +Informacije o tem kako povrniti commit na oddaljenem repository-ju v prejšnje stanje. Zelo uporabno, če moraš razveljaviti commit, ki je bil že poslan na GitHub. +> sledi tem korakom, če želiš povrniti commit v prejšnje stanje. + +### [Stiskanje commit-ov](squashing-commits.sl.md) +Informacije o tem kako stisnite commite z interaktivnim rebase-om. +> Uporabi te korake, če želiš narediti pull-request v odprto-kodni projekt in te pregledovalec prosi, da stisni (squash) vse commite v enega in dodaj informativno commit sporočilo. + +### [Razveljavljanje lokalnega commita](undoing-a-commit.sl.md) +Informacije o tem kako razveljaviti commit v svojem localnem repository-ju. Uporabno, ko si naredil zmešnjavo v lokalnem repository-ju in ga želiš postaviti na prejšnje stanje. +> Sledi korakom, ko želiš razveljaviti lokalni commit. + +### [Uporabne povezave](../git_workflow_scenarios/Useful-links-for-further-learning.md) +Ta dokument je namenjem vsem blogom, uporabnim stranem, spletnim stranem s triki in namigi, ki naredijo naša življenja lažja. Stran naj bi bila kazalo teh uporabnih povezav, ki lahko pomagajo vsem novincem v odprto-kodnem svetu in vsem, ki imajo željo po dodatnem znanju. diff --git a/additional-material/translations/additional-material.ur.md b/additional-material/translations/additional-material.ur.md new file mode 100644 index 00000000000..e6f4a8d557f --- /dev/null +++ b/additional-material/translations/additional-material.ur.md @@ -0,0 +1,46 @@ +# اضافی معلومات + +ہم سمجھتے ہیں کہ آپ یہاں آنے سے پہلے بنیادی سبق کے ساتھ پہلے ہی ختم ہو چکے ہیں. اضافی معلومات آپ کو اعلی درجے کی گیٹ کی تکنیک کے بارے میں کچھ معلومات دے گی. + +### [ایک ارتکاب ترمیم] (amending-a-commit.md) +یہ دستاویز دور دراز ذخیرہ پر ایک عہد میں ترمیم کے بارے میں معلومات فراہم کرتا ہے. +> اس کا استعمال کریں جب آپ نے ایک عہد کو ایڈجسٹ کرنے کی ضرورت ہے. + +### [Git ترتیب دیں] (configuring-git.md) +یہ دستاویز صارف کی تفصیلات اور Git میں دیگر اختیارات کو ترتیب دینے کے بارے میں معلومات فراہم کرتا ہے. +> اپنی گیٹ ترتیب کو بہتر بنانے کے لئے اس کا استعمال کریں. + +### [آپ کانٹا مخزن کے ساتھ موافقت پذیر رکھنا] (keeping-your-fork-synced-with-this-repository.md) +یہ دستاویزی معلومات فراہم کرتی ہے کہ بیس ذخیرہ کے ساتھ اپ ڈیٹ شدہ ذخیرہ رکھنے کی تاریخ کیسے برقرار رکھے گی. یہ ضروری ہے، امید ہے کہ آپ اور بہت سے دوسرے منصوبے میں حصہ لیں گے. +> ان مرحلے پر عمل کریں اگر آپ کے والدین والدین کی ذخیرہ میں کوئی تبدیلی نہیں ہے. + +### [چلتی ایک مختلف برانچ کا ارتکاب] (moving-a-commit-to-a-different-branch.md) +یہ دستاویز کسی اور برانچ میں کمیٹی منتقل کرنے کے بارے میں معلومات فراہم کرتا ہے. +> دوسری شاخ کو انجام دینے کے لۓ ان اقدامات کریں. + +### [ایک فائل اتارنے] (removing-a-file.md) +یہ دستاویز آپ کے مقامی ذخیرہ سے ایک فائل کو ہٹانے کے بارے میں معلومات فراہم کرتا ہے. +> ایک وعدہ سے پہلے ایک فائل کو ہٹانے کے بارے میں سیکھنے کے لئے ان اقدامات پر عمل کریں + +### [آپ مخزن سے شاخ ہٹا رہا ہے] (removing-branch-from-your-repository.md) +یہ دستاویز آپ کے ذخیرہ سے ایک شاخ کو کیسے خارج کرنے کے بارے میں معلومات فراہم کرتا ہے. +> آپ کے پل کی درخواست مل گئی ہے کے بعد صرف ان اقدامات کریں. + +### [حل تنازعات کو ضم کریں] (resolving-merge-conflicts.md) +یہ دستاویز مرگ تنازعات کو حل کرنے کے بارے میں معلومات فراہم کرتا ہے. +> پریشانی مر تنازعات کو حل کرنے کے لئے ان اقدامات کریں. + +### [ایک ارتکاب لوٹا رہا ہے] (reverting-a-commit.md) +یہ دستاویز دور دراز ذخیرہ پر ایک عہد کو واپس کرنے کے بارے میں معلومات فراہم کرتا ہے. یہ کام میں آتا ہے اس صورت میں جب آپ کو کسی ایسے وعدے کو رد کرنے کی ضرورت ہوتی ہے جو پہلے ہی گیتوب کو منتقل کردی گئی ہے. +> اگر آپ کسی وعدے کو ریورس کرنا چاہتے ہیں تو ان اقدامات کریں. + +### [اسکواشنگ کمیٹیاں] (squashing-commits.md) +یہ دستاویز ایک انٹرایکٹو بغاوت کے ساتھ کام کرتا ہے کس طرح اسکواش کس طرح کے بارے میں معلومات فراہم کرتا ہے. +> اس کا استعمال کریں اگر آپ ایک کھلی منبع پراجیکٹ میں پی آر کھولنا چاہتے ہیں اور تجزیہ کار آپ کو ہر ایک کو ایک باضابطہ وعدہ پیغام کے ساتھ اسکواش کرنے سے پوچھتا ہے. + +### [کالعدم کنڈ ایک مقامی ارتکاب] (undoing-a-commit.md) +یہ دستاویز آپ کے مقامی ذخیرہ پر ایک وعدے کو کس طرح رد کرنے کے بارے میں معلومات فراہم کرتا ہے. جب آپ محسوس کرتے ہیں کہ آپ نے اپنے مقامی ذخیرہ کو مسلط کیا ہے اور مقامی ذخیرہ کو ری سیٹ کرنے کا ارادہ رکھتے ہیں تو یہ وہی ہے. +> اگر یہ ایرر برقرار رہے تو ہمارے ہیلپ ڈیسک سے رابطہ کریں. غلط استعمال کی اطلاع دیتے ہوئے ایرر آ گیا ہے. + +### [مفید روابط] (Useful-links-for-further-learning.md) +یہ دستاویز تمام بلاگز خطوط، مددگار سائٹس، تجاویز اور چالوں کی ویب سائٹوں کے لئے وقف ہے جو ہماری جانوں کو آسان بنا دیتا ہے. کہ ہم اپنی تمام ضروریات کے لئے حوالہ دیتے ہیں، یہ ایک ابتدائی یا ایک ماہر بنیں. یہ صفحہ ان تمام مفید لنکس کی ایک انڈیکس کے طور پر کام کرنا چاہیے جو ہر فرد کو کھلے منبع ڈومین میں یا کسی کو مزید جاننے کے لئے مدد کرے گا. \ No newline at end of file diff --git a/additional-material/translations/addtional-material.cht.md b/additional-material/translations/addtional-material.cht.md new file mode 100644 index 00000000000..590d4d57e2a --- /dev/null +++ b/additional-material/translations/addtional-material.cht.md @@ -0,0 +1,46 @@ +# 附加資料 + +我們認為你在來到這裡以前已經完成基本教學。附加資料會給你關於 Git 進階技術的資訊。 + +### [從你的 repository 刪除分支](../removing-branch-from-your-repository.md) +這份文件教你如何從 repository 刪除分支。 +> 在做這些步驟前確定你的 pull request 是被合併的 + +### [保持你的分叉與 repository 同步](../keeping-your-fork-synced-with-this-repository.md) +這份文件提供保持分叉與原始 repository 同步的資料。這件事情是很重要的,因為有其他人會對 project 做出貢獻。 +> 如果你的分叉沒有對原始 repository 做改變,根據這些步驟做操作。 + +### [回復 commit](../reverting-a-commit.md) +這份文件提供如何對遠端 repository 回復 commit。這項操作適用在你需要回復 commit,但你已經 push 到 Github。 +> 如果你想要回復 commit,根據這些步驟操作。 + +### [修訂 commit](../amending-a-commit.md) +這份文件教你如何在修訂在遠端的 commit。 +> 在你需要調整 commit 的時候使用這個。 + +### [回復本地的 commit](../undoing-a-commit.md) +這份文件教你如何回復本地的 commit。在你覺得你搞砸了本地的 repository,並且希望重置你的 repository時,照著做就對了。 +> 如果你需要回復/重置 commit 時,跟著做吧。 + +### [解決合併時的衝突](../resolving-merge-conflicts.md) +這份文件教你解決合併時的衝突。 +> 跟著這些步驟來解決煩人的衝突。 + +### [刪除檔案](../removing-a-file.md) +這份文件教你從本地 repository 中刪除檔案。 +> 跟著這些步驟學習如何從之前的 commit 中刪除檔案。 + +### [移動 commit 到另一個分支](../moving-a-commit-to-a-different-branch.md) +這份文件教你如何移動 commit 到另一個分支。 +> 跟著步驟移動 commit 到另一個分支。 + +### [配置 git](../configuring-git.md) +這份文件教你設定 git 的使用者資料與其他選項。 +> 閱讀這份文件讓你對 git 配置更有掌握。 + +### [好用的連結](../Useful-links-for-further-learning.md) +這份文件包含許多好用的部落格文章、網站、提示和小技巧,了解這些讓我們可以更容易上手。這一頁應該當做好用連結的索引,讓開源的新手還有想認識開源的人可以了解更多。 + +### [擠壓 commits](../squashing-commits.md) +這份文件教你如何藉由互動式 rebase 擠壓 commits。 +> 如果你想要發出一個 PR,但檢閱者要求你將一部份 commits 擠壓成一個 commits 藉由互動式 rebase。 diff --git a/additional-material/translations/amending-a-commit.ko.md b/additional-material/translations/amending-a-commit.ko.md new file mode 100644 index 00000000000..8c609915f31 --- /dev/null +++ b/additional-material/translations/amending-a-commit.ko.md @@ -0,0 +1,46 @@ +## 커밋 수정하기 + +만약 커밋 메시지에 오타가 있거나 가장 최근의 커밋에서 몇줄을 빼먹은 걸 나중에 깨닫고 원격 저장소로 커밋을 수정하고자 하는 경우 어떻게 할까요? 이 자습서는 이러한 내용을 다룹니다. + +### Github에 이미 푸시한 후에 최근 커밋 메시지 변경하기 +파일을 열지 않고 수행할 경우: +* 다음을 타이핑합니다. ```git commit --amend -m "followed by your new commit message"``` +* 변경사항을 저장소에 커밋하려면 다음을 실행합니다. ```git push origin ``` + +참고: 단지 ```git commit --amend``` 이것만 입력한다면, 텍스트 편집기가 커밋 메시지를 입력하라고 할 것입니다. ``-m`` 플래그를 추가하면 이것을 막을 수 있습니다. + +### Modifying on a single commit + +그럼 한 단어를 변경하는 것과 같이 사소한 변경사항을 깜빡하고 커밋을 이미 원격 저장소에 푸시했다면 어떻게 해야 할까요? + +이를 설명하기 위해 여기 제 커밋 로그가 있습니다: +``` +g56123f create file bot file +a2235d updated contributor.md +a5da0d modified bot file +``` +봇 파일에 한 단어를 추가하는 것을 깜빡했다고 해 봅시다. + +이 경우 두가지 방법이 있습니다. 첫번째는 다음과 같이 변경사항을 포함하는 완전히 새로운 커밋을 수행하는 것입니다: +``` +g56123f create file botfile +a2235d updated contributor.md +a5da0d modified botfile +b0ca8f added single word to botfile +``` +두번째 방법은 a5da0d 커밋을 수정하고, 새 단어를 추가하고 이를 하나의 커밋으로 Github에 푸시하는 것 입니다. +이 방법은 사소한 변화이기 때문에 더 나을수도 있습니다. + +이를 위해 다음을 수행하십시오: +* 파일을 수정하십시오. 이 경우, 이전에 빠뜨린 단어를 포함하여 봇 파일을 수정합니다. +* 그 다음, ```git add ``` 을 실행하여 파일을 스테이징 영역으로 추가합니다. + +보통 파일을 스테이징 영역에 추가하고 나면, 다음으로 우리가 해야할 일은 git commit -m "our commit message" 입니다. +그러나 여기서 우리가 원하는 것은 이전 커밋을 수정하는 것이므로, 다음을 실행합니다: + +* ```git commit --ammend``` +그러면 텍스트 편집기가 뜨고 메시지를 수정하라는 프롬프트가 뜰 것입니다. 이전 그대로 메시지를 두거나 변경할 수 있습니다. +* 에디터를 빠져나오십시오. +* ```git push origin ``` para fazer o commit das mudanças para o repositório. + +Nota: Se você digitar apenas ```git commit --amend```, seu editor de texto abrirá te pedindo para editar a mensagem de commit. +Adicionar a flag ``-m`` previne isso. + +## Fazendo modificações em um único commit + +E se nós nos esquecermos de fazer uma pequena mudança em um arquivo, como adicionar uma única palavra, mas nós já demos push no commit para o nosso repositório remoto? + +Para ilustrar, aqui está um log dos meus commits: +``` +g56123f arquivo bot criado +a2235d atualizado contributor.md +a5da0d arquivo bot modificado +``` + +Supomos que eu esqueci de adicionar uma palavra no arquivo bot. + +Há 2 modos de resolver esse problema. O primeiro é fazer um novo commit que contém a mudança, dessa forma: + +``` +g56123f arquivo bot criado +a2235d atualizado contributor.md +a5da0d arquivo bot modificado +b0ca8f adicionada palavra no arquivo bot +``` + +O segundo modo é corrigir o commit a5da0d, adicionar essa nova palavra e dar push para o Github como um único commit. +Essa ação soa melhor, já que é apenas uma pequena alteração. + +Para fazer isso, nós faríamos o seguinte: +* Modificar o arquivo. Nesse caso, modificarei o arquivo bot para incluir a palavra que eu esqueci anteriormente. +* Em seguida, adicionar o arquivo para a área de preparação (*staging area*) com o comando ```git add ``` + +Normalmente, após adicionar arquivos na área de preparação, a próxima coisa que nós fazemos é entrar com o comando ```git commit -m "nossa mensagem de commit"```, certo? +Mas, como o que nós queremos fazer aqui é corrigir o commit anterior, nós ao invés disso iremos rodar: + +* ```git commit --amend``` + Isso irá inicializar o editor de texto para que possamos editar a mensagem. Você decide se irá deixar a mensagem como ela estava antes, ou editá-la. +* Sair do editor salvando as alterações +* Dar push nas suas alterações com o comando ```git push origin ``` + +Dessa forma, ambas as alterações agora estarão em um único commit. diff --git a/additional-material/translations/amending-a-commit.ru.md b/additional-material/translations/amending-a-commit.ru.md new file mode 100644 index 00000000000..e1416073957 --- /dev/null +++ b/additional-material/translations/amending-a-commit.ru.md @@ -0,0 +1,45 @@ +# Исправления в коммите + +Представьте, что вы сделали коммит в удаленный репозиторий, а потом поняли, что допустили опечатку в комментарии к коммиту или забыли вставить строку в этот последний по времени коммит. Как поступить в такой ситуации? Именно об этом и пойдет речь в этом документе. + +## Как изменить комментарий к недавнему коммиту после того, как он был послан на Github (pushed) +Чтобы сделать это, не открывая файл для редактирования, +* наберите ```git commit --amend -m "здесь следует текст нового комментария"``` +* а затем исполните ```git push origin <имя-ветки>``` для того, чтобы послать изменения на Github. + +Примечание: Если вы наберете, только ```git commit --amend```, то откроется текстовый редактор и предложит отредактировать комментарий к коммиту. Использование ключа ``-m`` отменяет запуск редактора. + +## Как сделать изменения в одном коммите + +Что если мы забыли сделать небольшое изменение в файле, например, заменить одно слово в коммите, который уже послан в удаленный репозиторий? + +Пусть, для примера, записи в журнале моих коммитов выглядят следующим образом: +``` +g56123f создай файл bot file +a2235d исправлен contributor.md +a5da0d изменен bot file +``` +Допустим, я забыл добавить одно слово в файл bot file + +Есть два способа исправить это. Первый заключается в создании нового коммита, содержащего это изменение, например, так: +``` +g56123f создай файл bot file +a2235d исправлен contributor.md +a5da0d изменен botfile +b0ca8f добавлено одно слово в botfile +``` +Второй способ состоит в исправлении коммита a5da0d, добавлении этого пропущенного слова и запушивании этих изменений на Github в виде одного коммита. +Второй способ представляется предпочтительным, поскольку дело идёт лишь о незначительном изменении. + +Чтобы добиться этого, мы поступим следующим образом: +* Изменим файл. В данном случае я изменю файл botfile, добавив к нему слово, которое я пропустил ранее. +* Далее, проиндексируем этот файл при помощи команды ```git add <имяфайла>``` + +В обычном случае сразу после индексирования мы делаем ```git commit -m "комментраий к нашему коммиту"```, правильно? Но поскольку в данном случае наша задача - исправить предыдущий коммит, - то вместо этого мы выполним такую команду: + +* ```git commit --amend``` + В результате откроется окно текстового редактора, в котором мы имеем возможность сделать изменения в комментарии. Мы можем в самом деле отредактировать комментарий, или оставить его без изменений. +* Выйдем из редактора +* Запушим наши изменения при помощи команды ```git push origin <имя-ветки>``` + +Таким образом, оба исправления окажутся в одном коммите. diff --git a/additional-material/translations/amending-a-commit.sl.md b/additional-material/translations/amending-a-commit.sl.md new file mode 100644 index 00000000000..1881495c6de --- /dev/null +++ b/additional-material/translations/amending-a-commit.sl.md @@ -0,0 +1,48 @@ +# Popravljanje Commita + +Kaj narediti, če pošlješ commit v oddaljeni repository in potem ugotoviš da si se zatipkal ali pa pozabil dodati vrstico kode v svoj zadnji commit. +Kako to popraviti? O tem govori ta vodič. + +## Spreminjanje komentarja commit-a, ki je bil pred kratkim poslan na GitHub +To lahko naredimo brez da bi odprli datoteko: +* V terminal vpiši ```git commit --amend -m "followed by your new commit message"``` +* Zaženi ```git push origin ``` da pošlješ commit s spremembo v repository. + +Opomba: Če vtipkaš samo ```git commit --amend```, se odpre tvoj urejevalnik besedil in te pozove da spremeniš komentar commit-a. +Zastavica ``-m`` to prepreči. + +## Sprememba enega commit-a + +No, kaj storiti, če pozabimo narediti eno malo spremembo v datoteki, kot na primer spremeniti eno besedo, vendar smo že poslali commit v oddaljeni repository? + +Prikaz praktičnega primera (zgodovina commit-ov tega repository-a): +``` +g56123f create file botfile +a2235d updated contributor.md +a5da0d modified botfile +``` +Recimo da smo pozabili dodati eno samo besedo datoteki botfile. + +Obstajata dva načina kako se stvari lotiti. Prvi primer je da naredimo nov commit, ki vsebuje spremembo: +``` +g56123f create file botfile +a2235d updated contributor.md +a5da0d modified botfile +b0ca8f added single word to botfile +``` +Drugi način je, da spremenimo commit a5da0d, mu dodamo pozabljeno besedo in ga pošljemo v GitHub, vse skupaj kot en commit. +Drugi način nam je bolj všeč, ker imamo opravka z manjšo spremembo. + +Da to dosežemo, storimo naslednje: +* Spremenimo datoteko. V tem primeru bomo spremenili datoteko botfile in ji dodali spuščeno besedo. +* Nato bomo dodali datoteko v čakalnico z ```git add ```. + +Običajno ko dodamo datoteke v čakalnico, je naslednji korak, da naredimo commit s komentarjem ( git commit -m "our commit message" ). +V tem primeru pa želimo popraviti že narejen commit, zato namesto tega izvedemo: + +* ```git commit --amend``` + Ukaz nam v tem primeru prikaže urejevalnik besedila in nam omogoči da spremenimo komentar. Sami se odločimo, ali spremenimo komentar, ali pustimo prejšnjega. +* Zapustimo urejevalnik besedil. +* Pošljemo spremembe z `` `git push origin ` ``. + +Na ta način bosta obe spremembi združeni v enem commit-u. diff --git a/additional-material/translations/amending-a-commit.ur.md b/additional-material/translations/amending-a-commit.ur.md new file mode 100644 index 00000000000..168fe27551e --- /dev/null +++ b/additional-material/translations/amending-a-commit.ur.md @@ -0,0 +1,51 @@ +کمانڈر ترمیم # + +اگر آپ اپنے دور دراز ذخیرہ میں تبدیلی کرتے ہیں تو صرف اس کے بعد احساس کرنے کے لۓ آپ کے پاس وعدہ کردہ پیغام میں ٹائپو ہے یا آپ کو اپنے حالیہ حاکموں میں ایک لائن شامل کرنا بھول گیا ہے. +تم اس میں کیسے ترمیم کرتے ہو؟ یہ وہی ہے جو سبق کا احاطہ کرتا ہے. + +## آپ Github کے لئے دھکیل دیا ہے کے بعد ایک حالیہ پیغام کا ارتکاب تبدیل کرنا. + +کسی فائل کو کھولنے کے بغیر ایسا کرنے کے لئے: +* میں ٹائپ کریں `` `git commit --amend -m "اپنا نیا ارتکاب کے بعد پیغام "` `` ارتکاب +* ذخیرہ کرنے کے لئے تبدیل کرنے کے لئے چلائیں `` `git push origin ` ``. + +نوٹ: اگر آپ صرف ``` git commit --amend ``` میں ٹائپ کریں تو، آپ کے ٹیکسٹ ایڈیٹر آپ کو وعدہ پیغام میں ترمیم کرنے کے لئے فوری طور پر کھولیں گے. +`` -m`` جھگڑے کو شامل کرنے سے روکتا ہے. + +## ایک واحد پر ترمیم کا ارتکاب + +لہذا، اگر ہم ایک ہی لفظ کو تبدیل کرنے کی طرح ایک فائل میں ایک معمولی تبدیلی کرنے کے لئے بھول گئے ہیں اور ہم نے پہلے سے ہی ہمارے دور دراز ذخیرہ کرنے کے لئے وعدے کو دھکا دیا ہے؟ + +یہاں وضاحت کرنے کے لئے میری اقلیت کی لاگت ہے: + +`` ` +g56123f create file bot file +a2235d updated contributor.md +a5da0d modified bot file +`` ` +آتے ہیں کہ میں بوٹ فائل میں ایک ہی لفظ شامل کرنے کے لئے بھول گیا + +اس کے بارے میں جانے کے لۓ 2 طریقے ہیں. سب سے پہلے ایک مکمل طور پر نیا وعدہ ہے جو اس طرح کی تبدیلی پر مشتمل ہے: + +`` ` +g56123f create file botfile +a2235d updated contributor.md +a5da0d modified botfile +b0ca8f added single word to botfile +`` ` +دوسرا طریقہ 5da0d وعدہ میں ترمیم کرنا ہے، اس نئے لفظ کو شامل کریں اور یہ ایک عہد کے طور پر جتھوٹ کو دھکا دیں. +دوسری آواز بہتر ہے کیونکہ یہ صرف ایک معمولی تبدیلی ہے. + +اس کو حاصل کرنے کے لئے، ہم مندرجہ ذیل کریں گے: +* فائل میں ترمیم کریں. اس صورت میں، میں نے پہلے ہی اتار دیا گیا لفظ شامل کرنے کے لئے میں botfile میں ترمیم کریں گے. +* اگلا، فیلڈ اسٹینج علاقے میں `` `git add ` `` + +عام طور پر اسٹینجنگ علاقے میں فائلوں کو شامل کرنے کے بعد، ہمارا اگلا کام ہمارا وعدہ ہے - ہمارا وعدہ پیغام "صحیح ہے؟ +لیکن چونکہ ہم یہاں حاصل کرنا چاہتے ہیں اس سے پچھلے وعدوں میں ترمیم کرنا ہے، ہم اس کے بجائے چلائیں گے: + +* `` `git commit --amend ` `` + اس کے بعد ٹیکسٹ ایڈیٹر کو لانے اور پیغام کو ترمیم کرنے کے لئے آپ کو فوری طور پر کریں گے. آپ پیغام کو چھوڑنے کا فیصلہ کر سکتے ہیں کیونکہ اس سے پہلے تھا یا اسے تبدیل کر دیا گیا تھا. +* ایڈیٹر سے باہر نکلیں +* اپنی تبدیلیوں کو دھکا دیں `` `git push origin ` `` + +اس طرح، دونوں تبدیلیاں ایک ہی انجام میں ہو گی. \ No newline at end of file diff --git a/additional-material/translations/configuring-git.ru.md b/additional-material/translations/configuring-git.ru.md new file mode 100644 index 00000000000..769f4fc803f --- /dev/null +++ b/additional-material/translations/configuring-git.ru.md @@ -0,0 +1,76 @@ +# Конфигурирование GITа + +Когда вы впервые попытались сделать коммит, вы могли увидеть такое сообщение: + +```bash +$ git commit +*** Please tell me who you are. [Пожалуйста, сообщите, кто вы.] + +Исполните следующие команды: + +git config --global user.email "you@example.com" +git config --global user.name "Your Name" + +чтобы идентифицировать пользователя по умолчанию для данной учетной записи. +Опустите ключ --global если вы хотите указать пользователя только для данного репозитория. +``` + +Чтобы создать коммит, GIT должен знать кто является его автором. При совместной работе, необходимо знать кем и когда были изменены те или иные части проекта, поэтому GIT предусматривает, что каждый коммит при его создании ассоциируется с именем и емейл адресом пользователя. + +Существует несколько способов, которые позволяют ассоциировать команду `git commit` с вашим емейлом и именем, и здесь мы перечислим некоторые из них. + +### Глобальная конфигурация + +Информация, сохраненная как часть глобальной конфигурации, относится ко всей системе, т.е. ко всем репозиториям, в которых вы работаете. Это предпочтительный способ, подходящий для большинства из вариантов использования. + +Для сохранения данных в глобальной конфигурации пользуйтесь коммандой `config` в следующей форме: + +`$ git config --global <название переменной> <значение переменной>` + +В применении к информации о пользователе, мы исполняем эти команды таким образом: + +``` +$ git config --global user.email "you@example.com" +$ git config --global user.name "Your Name" +``` + +### Конфигурация репозитория + +Как указывает заголовок, такая конфигурация работает в пределах данного репозитория. Если вы хотите сделать коммит в определенном репозитории, скажем содержащем проект связанный с вашим бизнесом, используя емейл вашей компании, тогда вы можете использовать этот способ конфигурации. + +Чтобы изменить конфигурацию на уровне репозитория, следует опустить ключ `--global` в команде `config` таким образом: + +`$ git config <название переменной> <значение переменной>` + +В применении к информации о пользователе, это выглядит следующим образом: + +``` +$ git config user.email "you@alternate.com" +$ git config user.name "Your Name" +``` + +### Конфигурация в командной строке + +Этот способ конфигурации относится только к данной команде. Все команды GIT'а позволяют использовать ключ `-c` перед глаголом идентифицирующим команду для временной установки конфигурационных параметеров. + +Для изменения параметров конфигурации, распространяющихся только на данную команду, пользуйтесь следующим форматом команд GIT'a: + +`$ git -c <переменная-1>=<значение переменной-1> -c <переменная-2>=<значение переменной-2> <команда>` + +Для нашего случая комманда для коммита будет вылядеть так: + +`git -c user.name='Your Name' -c user.email='you@example.com' commit -m "Ваш комментарий к коммиту"` + +### Замечание о порядке предшествования + +Порядок предшествования среди трех упомянутых типов команд конфигурации определяется как `конфигурация в командной строке > конфигурация репозитория > глобальная конфигурация`. Это означает, что если какая-либо переменная определена, как в глобальной конфигурации, так и в командной строке, то будет использовано значение, присвоенное в командной строке. + +## Не только информация о пользователе + +До сих пор, обсуждая конфигурацию GIT'а, мы касались лишь информации о пользователе. Однако GIT позволяет конфигурировать еще неслколько параметров. Вот некторые из них: + +1. `core.editor` - указывает название редактора для редактирования комментарий для коммита и т.п., +2. `commit.template` - указывает файл, который содержит первоначальный темплат для коммита, +3. `color.ui` - логическая переменная, указывающая следует ли испольовать цветные шрифты в сообщениях на терминале GIT'а. + +Для простоты мы опустили некоторые детали. Для более подробного ознакомления обратитесь к [git-scm.com](https://git-scm.com/book/ru/v1/Введение-Первоначальная-настройка-Git). \ No newline at end of file diff --git a/additional-material/translations/configuring-git.sl.md b/additional-material/translations/configuring-git.sl.md new file mode 100644 index 00000000000..591bb4c9493 --- /dev/null +++ b/additional-material/translations/configuring-git.sl.md @@ -0,0 +1,77 @@ +# Nastavljanje Git okolja + +Ko si prvič poskusil narediti commit z Git-om, je možno da se je prikazalo naslednje sporočilo: + +```bash +$ git commit +*** Please tell me who you are. + +Run + +git config --global user.email "you@example.com" +git config --global user.name "Your Name" + +to set your account's default identity. +Omit --global to set the identity only in this repository. +``` + +Git mora vedeti kdo si, da lahko ustvari commit. Ko delaš v skupini z več ljudmi, naj bi se vedno vedelo kdo je naredil katero spremembo v projektu in kdaj jo je nardil. V ta namen je bil Git ustvarjen tako, da so commit-i vezani na ime in e-pošto. + +Obstaja več načinov kako ukazu `git commit` podati svoje ime in e-pošto in nekaj jih bomo pregledali v naslednjih vrsticah. + +### Globalna konfiguracija + +Ko nekaj shranimo v globalno konfiguracijo (global config), je ta nastavitev dosegljiva vsem repository-em na katerih delaš. Ta način se priporoča in deluje v večini primerov. + +Da nekaj shranimo v globalno konfiguracijo, uporabimo ukaz `config`: + +`$ git config --global ` + +V primeru uporabniških podatkov: + +``` +$ git config --global user.email "you@example.com" +$ git config --global user.name "Your Name" +``` + +### Konfiguracija repository-ja + +Kot nam že samo ime pove, so te konfiguracije omejene samo na en repository. Če želiš narediti commit v točno določen repository, recimo službeni projekt, s svojo službeno e-pošto, potem uporabimo to metodo. + +Da nekaj shranimo v konfiguracijo repository-ja, uporabimo ukaz `config` in spustimo zastavico `--global`: + + +`$ git config ` + +V primeru uporabniških podatkov: + +``` +$ git config user.email "you@alternate.com" +$ git config user.name "Your Name" +``` + +### Konfiguracija ukazne vrstice + +Te konfiguracije so omejene samo na trenutno ukazno vrstico. Vsi Git ukazi sprejmejo predpono `-c` pred glagolom ukaza. S tem ustvarimo začasno konfiguracijo. + +Da nekaj shranimo v konfiguracijo ukazne vrstice: + +`$ git -c = -c = ` + +V našem primeru bi ukaz commit uporabili takole: + +`git -c user.name='Your Name' -c user.email='you@example.com' commit -m "Your commit message"` + +### O prednosti + +Zaporedje uporabe med zgoraj omenjenimi metodami je sledeče `command-line > repository > global`. To pomeni da, če je spremenljivka shranjena v ukazni vrstici in globalno, bi bila uporabljena vrednost v konfiguraciji ukazne vrstice. + +## Dodatno + +Do sedaj smo delali samo z nastavitvami uporabnika, vendar obstaja še nekaj drugih konfiguracij. Nekatere med njimi so: + +1. `core.editor` - za določitev urejevalnika besedila, ki se uporabi za pisanje komentarjev, itd. +2. `commit.template` - za določitev datoteke v sistemu, ki se uporabi kot začetna predloga za commit +3. `color.ui` - za določitev boolean vrednosti za uporabo barv v Git-ovem izpisu. + +Nekaj podrobnosti smo poenostavili za lažje razumevanje. Več si lahko prebereš na [git-scm.com](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration). diff --git a/additional-material/translations/keeping-your-fork-synced-with-this-repository.ko.md b/additional-material/translations/keeping-your-fork-synced-with-this-repository.ko.md new file mode 100644 index 00000000000..4e8a424b537 --- /dev/null +++ b/additional-material/translations/keeping-your-fork-synced-with-this-repository.ko.md @@ -0,0 +1,41 @@ +# 여러분이 포크한 저장소와 싱크상태 유지하기 + +먼저, 전체 싱크과정을 이해해야합니다. 본 스키마에는 3개의 저장소들이 있습니다. 저의 GitHub에 있는 제 공개저장소인 `github.com/Roshanjossey/first-contributions/`와 여러분의 포크된 저장소인 `github.com/Your-Name/first-contributions/`, 그리고 로컬 머신에 위치해서 현재 작업중인 저장소가 있습니다. 오픈 소스 프로젝트에 특화된 이러한 조합을 `트라이앵글 워크플로우`라고 부릅니다. + +triangle workflow + +여러분의 두 개의 저장소들을 제 공개 저장소의 최신 상태와 싱크상태를 유지하기 위해서는 제일 먼저여러분의 로컬머신에 위치한 저장소를 제 공개 저장소와 fetch와 merge를 해야합니다. +두번째는 여러분의 로컬 저장소를 포크된 GitHub의 저장소에 push하는 것 입니다. 이전 과정에서 봤듯이 "pull request"를 요청할 수 있는 곳은 오직 포크된 저장소에서만 가능합니다. 따라서 마지막으로 업데이트 되어야하는 저장소는 포크된 GitHub입니다. +자, 어떻게하는지 보겠습니다: +먼저 여러분은 master 브랜치에 위치해 있어야합니다. 현재 어떤 브래치에 있는지 확인합니다.: +``` +git status +``` +현재 master 브랜치가 아니라면 변경합니다.: +``` +git checkout master +``` + +제 공개 저장소를 아직 여러분의 git에 추가하지 않았다면 다음 명령으로 추가합니다. `add upstream remote-url`: +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` +지정한 URL을 이용해 현재 프로젝트의 또 다른 최신 버전이 있는지 git에게 확인을 요청하는 방법입니다. 그리고 우리는 이를 `upstream` 이라고 부르기로합니다. 일단 git이 이러한 이름을 가지고 있다면 다음과 같이 공개 저장소의 최진 버전을 가지고 옵니다. : +``` +git fetch upstream +``` + +여러분은 이제 제 포크(upstream remote)에서 최신 버전을 내려 받았습니다. 이제 공개 저장소의 변경된 내용을 여러분의 master 브랜치에 병합해야합니다. +``` +git rebase upstream/master +``` + +여러분의 master 브랜치와 공개 저장소를 병합하고 나면 이제 여러분의 로컬머신의 master 브랜치는 최신 상태입니다. 마지막으로 여러분의 master 브랜치를 여러분의 포크에 push하게 되면 포크한 GitHub 또한 변경사항들이 반영됩니다.: +``` +git push origin master +``` +origin으로 명명된 리모트에 push하는 것에 주의하세요. +이제 여러분의 모든 저장소가 최신 상태를 유지하게 되었습니다. +잘 하셨습니다! GitHub 저장소에 커밋이 추가적으로 발생할 때마다 이러한 작업을 해야합니다. + + diff --git a/additional-material/translations/keeping-your-fork-synced-with-this-repository.pt_br.md b/additional-material/translations/keeping-your-fork-synced-with-this-repository.pt_br.md new file mode 100644 index 00000000000..c8963ceb938 --- /dev/null +++ b/additional-material/translations/keeping-your-fork-synced-with-this-repository.pt_br.md @@ -0,0 +1,40 @@ +## Mantendo o seu Fork sincronizado com este repositório + +Primeiro, o fluxo para uma sincronização completa precisa ser entendido. Nesse cenário, temos 3 repositórios diferentes: o meu repositório público no Github `github.com/Roshanjossey/first-contributions/`, seu Fork no GitHub `github.com/Seu-Nome/first-contributions/` e o repositório local, no qual você deve trabalhar. Esse tipo de cooperação é típica de projetos de *open source* (código aberto) e é chamado de `Triangle Workflows`. + +triangle workflow + +Para manter seus dois repositórios atualizados com meu repositório público, o primeiro passo é dar um Fetch (buscar) e então um Merge (mesclar) do repositório público ao seu repositório local. +O segundo passo é fazer um Push do repositório local para o seu Fork no GitHub. Como vimos anteriormente, é somente a partir do seu Fork que você consegue fazer um Pull Request. Por isso, esse Fork é o último repositório a ser atualizado. + +Agora, vamos ver como fazer isso: + +Primeiro, você precisa estar em seu Branch principal (master). Para saber em qual Branch você está, verifique a primeira linha que aparece como resultado do seguinte comando: +``` +git status +``` +Se você não está no master, vá para ele: +``` +git checkout master +``` + +Em seguida, você deve adicionar meu repositório público ao seu git com `add upstream url-remoto`: +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` +Esta é uma forma de dizer ao Git que existe uma outra versão deste projeto na URL especificada e estamos chamando-a de `upstream`. Agora busque a nova versão do meu repositório: +``` +git fetch upstream +``` + +Aqui você está buscando todas as mudanças no meu Fork (o remoto `upstream`). Agora, você precisa mesclá-lo ao repositório público no seu Branch principal. +``` +git rebase upstream/master +``` +Aqui você está aplicando todas as mudanças que buscou ao seu Branch principal (master). Seu repositório local agora está atualizado. Por último, se você fizer um Push do seu Branch master para o seu Fork, seu GitHub também terá as alterações: +``` +git push origin master +``` +Note que aqui você está fazendo um Push para o repositório remoto chamado `origin`. + +Agora, todos os seus repositórios estão atualizados. Bom trabalho! Você deve seguir esses passos sempre que seu repositório no GitHub avisar que está alguns Commits atrás do meu repositório. diff --git a/additional-material/translations/keeping-your-fork-synced-with-this-repository.sl.md b/additional-material/translations/keeping-your-fork-synced-with-this-repository.sl.md new file mode 100644 index 00000000000..d5224ebff56 --- /dev/null +++ b/additional-material/translations/keeping-your-fork-synced-with-this-repository.sl.md @@ -0,0 +1,40 @@ +# Kako imeti svojo različico sinhronizirano z oddaljenim repository-em + +Najprej moramo razumeti kako poteka sinhronizacija. V tej shemi so trije različni repository-ji: moj javni repository na GitHub-u `github.com/Roshanjossey/first-contributions/`, tvoja različica tega repository-ja na GitHub-u `github.com/Your-Name/first-contributions/` in lokalni repository na tvojem računalniku. Ta način delovanja je značilen za odprto-kodne projekte in se imenuje `Triangle Workflow`. + +triangle workflow + +Da obdržimo tvoja dva repository-ja sinhronizirana z mojim javnim repository-jem, moramo najprej pridobiti javni repository in ga združiti s tvojim lokalnim repository-jem ( fetch and merge ). +Naslednji korak bo, da pošljemo tvoj lokalni repository v tvojo GitHub različico. Kot smo že prej videli, lahko samo iz GitHub različice zahtevamo "pull request". Zato je tvoja GitHub različica zadnji repository, ki se ga posodobi na zadnjo verzijo. + +No pa poglejmo kako se to naredi: + +Najprej moraš biti v svoji glavni veji ( master branch ). Da izveš na kateri veji si trenutno, izvedi ta ukaz in poglej prvo vrstico odgovora: +``` +git status +``` +Če nisi na glavni veji uporabi: +``` +git checkout master +``` + +Potem dodaš moj javni repository svojemu git-u z ukazom `add upstream remote-url`: +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` +Na ta način povemo git-u da obstaja še ena verzija tega projekta na podanem naslovu in da jo imenujemo `upstream`. Sedaj, ko ima tvoj git ime in naslov, lahko s tega naslova pridobimo zadnjo verzijo javnega repository-ja z ukazom `fetch`: +``` +git fetch upstream +``` + +Pravkar ste pridobili zadnjo verzijo moje različice (`upstream` remote). Sedaj pa je potrebno še združiti javni repository v tvojo glavno vejo (master branch). +``` +git rebase upstream/master +``` +Tukaj združuješ javni repository s svojo glavno vejo. Glavna veja na tvojem računalniku je sedaj posodobljena. Na koncu pošlješ še svojo glavno vejo v tvojo različico (fork) na GitHub-u in tudi ta bo posodobljena z zadnjimi spremembami: +``` +git push origin master +``` +Tukaj lahko vidiš da pošiljaš v oddaljeni repository imenovan `origin`. + +Na tej točki, so vsi tvoji repository-ji posodobljeni. Dobro opravljeno! To stori vsakič, ko te tvoj GitHub repository opozori, da ni sinhroniziran z ostalimi repository-ji. diff --git a/additional-material/translations/moving-a-commit-to-a-different-branch.hi.md b/additional-material/translations/moving-a-commit-to-a-different-branch.hi.md new file mode 100644 index 00000000000..59164dd5eaf --- /dev/null +++ b/additional-material/translations/moving-a-commit-to-a-different-branch.hi.md @@ -0,0 +1,25 @@ +# एक कमिट शाखा को एक अलग शाखा में ले जाना +क्या होगा यदि आप कोई बदलाव कमिट करते हैं, और फिर महसूस करें कि आप एक अलग शाखा में आए हैं? +आप इसे कैसे बदल सकते हैं? यह ट्यूटोरियल कवर करता है। + +## सबसे मौजूदा काम को मौजूदा शाखा में ले जाना +ऐसा करने के लिए, टाइप करें: + +``` git reset HEAD~ --soft ```- अंतिम कमिट को पूर्ववत करता है, लेकिन उपलब्ध परिवर्तनों को छोड़ दें। +``` git stash ```- निर्देशिका की स्थिति रिकॉर्ड करता है। + +``` git checkout name-of-the-correct-branch ``` - दूसरी शाखा में स्विच करता है। +``` git stash pop ``` - आखिरी स्टेशेड स्टेटस को हटा देता है। +``` git add ``` - या अलग-अलग फाइलों को एक साथ स्टेज करने का प्रयास करें। +``` git commit -m "आपका संदेश यहां" ``` - परिवर्तनों को सुरक्षित कर देता है और कमिट करता है। + +अब आपके परिवर्तन सही शाखा पर हैं + + +### सबसे पुराना काम एक नई शाखा में ले जाना +ऐसा करने के लिए, टाइप करें: +``` git branch newbranch```- एक नई शाखा बनाता है। सभी कमिट को सुरक्षित कर देता है। +``` git reset --hard HEAD~#``` - मास्टर को वापस #कमिट में ले जाएं। याद रखें, यह काम मास्टर से जा चूका होगा +``` git checkout newbranch``` - आपके द्वारा बनाई गई शाखा में जाता है। इसमें सभी कमिट होंगे। + +याद रखें: कोई भी बदलाव कमिट नहीं किया गया तो खो जाएगा। \ No newline at end of file diff --git a/additional-material/translations/moving-a-commit-to-a-different-branch.ko.md b/additional-material/translations/moving-a-commit-to-a-different-branch.ko.md new file mode 100644 index 00000000000..0a7d6d0d2ed --- /dev/null +++ b/additional-material/translations/moving-a-commit-to-a-different-branch.ko.md @@ -0,0 +1,28 @@ +## 커밋을 다른 브랜치로 옮기기 + +What if you commit a change, and then realize that you committed to a different branch? +How can you change that? This is what this tutorial covers. +만일 변경사항을 반영했는데 전혀 다른 브랜치에 커밋한 사실을 알았다면 어떻게할까요? +이걸 어떻게 바로잡을 수 있을까요? 바로 이 장에서 다룰 내용입니다. + +### 가장 최근 커밋들을 기존에 있는 브랜치로 이동시키기 +사용예: + +```git reset HEAD~ --soft``` - 마지막 커밋을 되돌립니다. 물론 수정한 내용은 그대로 남아있습니다. +```git stash``` - 현재까지 수정한 모든 작업내용들의 상태를 저장합니다. + +```git checkout name-of-the-correct-branch``` - 실제 반영하고자하는 브랜치를 체크아웃합니다. +```git stash pop``` - 마지막으로 저장한(stash) 변경내역들을 현재 브랜치에 반영하고 저장한 내역에서 삭제합니다. +```git add .``` - 또는 커밋에 반영할 변경내역들을 개별적으로 추가합니다. +```git commit -m "your message here"``` - 저장하고 변경내역을 커밋합니다. + +자 이제 변경사항이 올바른 브랜치에 반영되었습니다. + +### 가장 최근 커밋들을 신규 브랜치를 생성하여 이동시키기 + +사용예: +```git branch newbranch``` - 신규 브랜치를 생성하고 모든 커밋들을 저장합니다. +```git reset --hard HEAD~#``` - master 브랜치의 #번째 커밋을 되돌립니다. 되돌린 커밋들은 master에서 완전히 삭제되므로 주의하세요. +```git checkout newbranch``` - 생성한 브랜치로 이동합니다. 모든 커밋들을 가지고 있을겁니다. + +주의: 커밋하지 않은 변경사항들은 사라집니다. diff --git a/additional-material/translations/moving-a-commit-to-a-different-branch.ru.md b/additional-material/translations/moving-a-commit-to-a-different-branch.ru.md new file mode 100644 index 00000000000..dbf8c5a2ba5 --- /dev/null +++ b/additional-material/translations/moving-a-commit-to-a-different-branch.ru.md @@ -0,0 +1,25 @@ +# Перемещение коммита в другую ветку +Что если вы сделали коммит, а затем поняли, что изменили неправильную ветку? +Как исправить такую ошибку? На этот вопрос отвечает данная инструкция. + +## Перемещение последних коммитов в существующую ветку +Для такого перемещения, наберите: + +```git reset HEAD~ --soft``` - Отменяет последний коммит, но сохраняет сделанныые изменения. +```git stash``` - Сохраняет состояние директории. + +```git checkout <имя правильной ветки>``` - Переключается на другую ветку. +```git stash pop``` - Возвращает последнее сохраненное состояние. +```git add .``` - Добавляет индивидуальные файлы. +```git commit -m "ваш комментарий"``` - Сохраняет и делает коммит изменений. + +Теперь ваши изменения - в правильной ветке. + + +### Перемещение последних коммитов в новую ветку +Для такого перемещения, наберите: +```git branch newbranch``` - Создает новую ветку, сохраняя все коммиты. +```git reset --hard HEAD~[n]``` - Возвращает ветку master назад на n коммитов. Имейте в виду, что изменения содержащиеся в этих коммитах будут полностью удалены из ветки master. +```git checkout newbranch``` - Переключается на ветку, которую вы создали. Эта ветка теперь содержит все коммиты. + +Запомните: Любые изменения, которые не были включены в коммит, будут полностью ПОТЕРЯНЫ. diff --git a/additional-material/translations/moving-a-commit-to-a-different-branch.sl.md b/additional-material/translations/moving-a-commit-to-a-different-branch.sl.md new file mode 100644 index 00000000000..3074388ec80 --- /dev/null +++ b/additional-material/translations/moving-a-commit-to-a-different-branch.sl.md @@ -0,0 +1,24 @@ +# Premikanje commita v drugo vejo +Kaj storiti, če izvedeš commit svojih sprememb, in potem ugotoviš da si izvedel commit v napačni veji? Kako lahko to spremenimo? To je razloženo v tem vodiču. + +## Premikanje zadnjega commita v obstoječo vejo +To storiš z naslednjimi ukazi: + +```git reset HEAD~ --soft``` - Razveljavi zadnji commit, spremembe ostanejo na voljo. +```git stash``` - Posname stanje direktorija in ga shrani v `stash`. + +```git checkout name-of-the-correct-branch``` - Prestavi v drugo vejo. +```git stash pop``` - Vzame zadno shranjeno stanje iz `stash-a`. +```git add .``` - Ali dodaš posamezne datoteke. +```git commit -m "your message here"``` - Shrani in izvede commit sprememb. + +Sedaj so tvoje spremembe na pravi veji. + + +### Premikanje zadnjih nekaj commitov v novo vejo +To storiš z naslednjimi ukazi: +```git branch newbranch``` - Ustvariš novo vejo. Nova veja ima vse prej ustvarjene commite. +```git reset --hard HEAD~#``` - Premakni glavno vejo ( master ) nazaj za # commit-ov. Ti commit-i bodo izbrisani z glavne veje! +```git checkout newbranch``` - Prestaviš se v novo vejo, ki ima vse prej ustvarjene commit-e. + +Pomembno: Vse spremembe, ki niso bile commit-ane, bodo IZGUBLJENE! \ No newline at end of file diff --git a/additional-material/translations/removing-a-file.ru.md b/additional-material/translations/removing-a-file.ru.md new file mode 100644 index 00000000000..eabe0f1c1be --- /dev/null +++ b/additional-material/translations/removing-a-file.ru.md @@ -0,0 +1,23 @@ +# Удаление файла из-под GIT контроля + +Иногда может возникнуть необходимость удалить файл из-под GIT контроля, но сохранить его на компьютере. Это может быть достигнуто с помощью следующей команды: + +``git rm <файл> --cached`` + +## Что же произошло? + +GIT более не контролирует изменения в удалённом файле. С точки зрения GIT'а, этот файл отсутствует, но если вы попробуете локализовать этот файл в файловой системе, то вы увидите, что он всё еще на месте. + +Заметьте, что в приведенной выше комманде используется ключ `--cached`. Если бы мы не добавили этот ключ, GIT уничтожил бы файл не только из репозитория, но также и из файловой системы. + +Если вы сделаете коммит при помощи команды `git commit -m "Удалить file1.js"` и затем запушите его в удалённый репозиторий командой `git push origin master`, файл будет стёрт также и из удалёного репозитория. + +## Дополнительная информация + +- Если вы хотите удалить более одного файла, это можно сделать, перечислив все файлы в одной команде: + + `git rm file1.js file2.js file3.js --cached` + +- Вы можете использовать шаблон (*) для удаления файлов с близкими именами, например, если вы хотите удалить все .txt файлы из локального репозитория, наберите: + + `git rm *.txt --cached` diff --git a/additional-material/translations/removing-a-file.sl.md b/additional-material/translations/removing-a-file.sl.md new file mode 100644 index 00000000000..7b75f583bf0 --- /dev/null +++ b/additional-material/translations/removing-a-file.sl.md @@ -0,0 +1,23 @@ +# Odstranjevanje datoteke + +Včasih si želiš odstraniti datoteko z Git-a, vendar je ne želiš odstraniti s svojega računalnika. To lahko storiš z uporabo naslednjega ukaza: + +``git rm --cached`` + +## Kaj se je zgodilo? + +Git ne bo več sledil spremembam v odstranjeni datoteki. Kar se tiče Git-a, ta datoteka ne obstaja več. Če poiščeš datoteko na svojem disku, vidiš da še vedno obstaja. + +V zgornjem primeru smo uporabili zastavico `--cached`. Če je ne bi uporabili, bi Git odstranil datoteko tudi z našega diska. + +Če sedaj ustvarimo commit z `git commit -m "Remove file1.js"` in ga pošljemo v oddaljeni repository z ukazom `git push origin master`, bo datoteka odstranjena tudi iz oddaljenega repository-ja. + +## Dodatne možnosti + +- Če želiš odstraniti več datotek, jih lahko vse vljučiš v en ukaz: + + `git rm file1.js file2.js file3.js --cached` + +- Lahko uporabiš nadomestni znak (*) da odstraniš podobne datoteke. Na primer, če želiš odstraniti vse datoteke s končnico .txt s svojega repository-ja, uporabi ukaz: + + `git rm *.txt --cached` diff --git a/additional-material/translations/removing-a-file.ua.md b/additional-material/translations/removing-a-file.ua.md new file mode 100644 index 00000000000..3c8fb5f564a --- /dev/null +++ b/additional-material/translations/removing-a-file.ua.md @@ -0,0 +1,23 @@ +# Видалення файлу з-під GIT контролю + +Іноді може виникнути необхідність видалити файл з-під GIT контролю, але зберегти його на комп'ютері. Це може бути досягнуто за допомогою наступної команди: + +`` Git rm <файл> --cached`` + +## Що ж сталося? + +GIT більш не контролює зміни у віддаленому файлі. З точки зору GIT'а, його немає, але якщо ви спробуєте локалізувати цей файл в файловій системі, то ви побачите, що він все ще на місці. + +Зауважте, що в наведеній вище комманде використовується ключ `--cached`. Якби ми не додали цей ключ, GIT знищив би файл не тільки зі сховищ, але також і з файлової системи. + +Якщо ви зробите Комміт за допомогою команди `git commit -m" Видалити file1.js "` і потім запущено його в віддалений репозиторій командою `git push origin master`, файл буде стертий також і з віддаленого сховища. + +## Додаткова інформація + +- Якщо ви хочете видалити більше одного файлу, це можна зробити, перерахувавши всі файли в одній команді: + +    `Git rm file1.js file2.js file3.js --cached` + +- Ви можете використовувати шаблон (*) для видалення файлів з близькими іменами, наприклад, якщо ви хочете видалити всі .txt файли з локального сховища, наберіть: + +    `Git rm * .txt --cached` diff --git a/additional-material/translations/removing-branch-from-your-repository.hi.md b/additional-material/translations/removing-branch-from-your-repository.hi.md new file mode 100644 index 00000000000..ff85d35d181 --- /dev/null +++ b/additional-material/translations/removing-branch-from-your-repository.hi.md @@ -0,0 +1,31 @@ +# अपने रिपॉजिटरी से एक शाखा निकालें + +यदि आपने अब तक ट्यूटोरियल का पालन किया है, तो हमारी `` शाखा ने अपना उद्देश्य पूरा कर लिया है, अब यह आपके स्थानीय मशीन के रेपो से इसे हटाने का समय है। यह आवश्यक नहीं है, लेकिन इस शाखा का नाम इसके बजाय विशेष उद्देश्य दिखाता है। इसका जीवन संगत रूप से छोटा हो सकता है। + +सबसे पहले, अपने मास्टर में अपने `` को मर्ज करें, इसलिए अपनी मास्टर शाखा पर जाएं: +``` +git checkout master +``` + +मास्टर में ``मर्ज करें: +``` +git merge master +``` + +अपने स्थानीय मशीन के रेपो से `` निकालें: +``` +git branch -d +``` + +अब आपने अपनी स्थानीय मशीन की `` शाखा हटा दी है और सब कुछ साफ़ सुथरा लग रहा है। +हालांकि, इस समय, आपके पास अभी भी आपके गिटहब फोर्क में `` शाखा होनी चाहिए। हालांकि, इससे पहले कि आप इसे हटा दें, याद रखें कि आपने इस रिमोट शाखा से अपने रेपो को "पुल रिक्वेस्ट" भेजा है। इसलिए जब तक कि मैं इसे मर्ज नहीं करता हूं, इस शाखा को न हटाएं। + +हालांकि, अगर मैंने आपकी शाखा मर्ज कर ली है और आप रिमोट शाखा को हटाना चाहते हैं, तो इसका उपयोग करें: +``` +git push origin --delete +``` + +अब, आप जानते हैं कि अपनी शाखाओं को कैसे साफ किया जाए। +समय के साथ, मेरे सार्वजनिक रिपो में कई रेपो जोड़े जाएंगे। और आपकी स्थानीय मशीन और आपके गिटहब फर्क की मास्टर शाखाएं अद्यतित नहीं होंगी। तो अपने रेपोसिटोरिएस को मेरे साथ सिंक्रनाइज़ करने के लिए, नीचे दिए गए चरणों का पालन करें। + +#### [अपने फोर्क को रिपॉजिटरी के साथ सिंक रखना] (keeping-your-fork-synced-with-this-repository.md) \ No newline at end of file diff --git a/additional-material/translations/removing-branch-from-your-repository.ko.md b/additional-material/translations/removing-branch-from-your-repository.ko.md new file mode 100644 index 00000000000..b1e51ca2f96 --- /dev/null +++ b/additional-material/translations/removing-branch-from-your-repository.ko.md @@ -0,0 +1,30 @@ +## 여러분의 저장소에서 브랜치 삭제하기 + +지금까지의 튜토리얼을 수행했다면, 우리의 `` 브랜치가 목적을 완료했습니다. 이제는 로컬 저장소에서 삭제할 차례입니다. 필수사항은 아니지만 이 브랜치의 이름은 다소 특별한 목적을 나타내므로 이미 병합되었다면 그 수명을 다했다고 할 수 있습니다. +First, let's merge your `` to your master, so to go your master branch: +먼저, ``을 마스터에 합쳐야합니다. 마스터 브랜치로 이동합니다.: +``` +git checkout master +``` + +``를 마스터에 병합합니다.: +``` +git merge master +``` + +``를 로컬 저장소에서 삭제합니다.: +``` +git branch -d +``` + +이제 로컬 머신의 ``브랜치를 삭제했고 모든 것이 깔끔하게 보입니다. +이 시점에서 GitHub 포크에 여전히 `` 브랜치가 있어야합니다. 그러나 이것을 삭제하기 전에 이 원격지의 브랜치에서 상위 저장소로 "PR(Pull request)"을 보냈음을 기억하십시오. 따라서 아직 병합되지 않았다면이 브랜치를 삭제하지 마십시오. +그러나 해당 브래치를 이미 병합했고 원격 브랜치를 삭제하려면 다음을 사용하십시오.: +``` +git push origin --delete +``` + +자, 여러분은 이제 자신의 브래치를 정리하는 법을 배웠습니다. +시간이 지나면 많은 커밋이 저장소에 추가됩니다. 그리고 로컬 머신과 GitHub 포크의 마스터 브랜치는 최신 버전이 아닙니다. 따라서 저장소를 내 것과 동기화 된 상태로 유지하려면 아래 단계를 따르십시오. + +#### [여러분이 포크한 저장소와 싱크상태 유지하기](keeping-your-fork-synced-with-this-repository.ko.md) diff --git a/additional-material/translations/removing-branch-from-your-repository.pt_br.md b/additional-material/translations/removing-branch-from-your-repository.pt_br.md new file mode 100644 index 00000000000..663e75d1fb9 --- /dev/null +++ b/additional-material/translations/removing-branch-from-your-repository.pt_br.md @@ -0,0 +1,31 @@ +## Removendo o Branch do seu repositório + +Se você seguiu o tutorial até agora, seu Branch `` concluiu seu objetivo, e é hora de deletá-lo do seu repositório local. Isso não é necessário, mas o próprio nome desse Branch mostra como seu objetivo é específico. Sua vida pode ser tornada curta por causa dessa especificidade. + +Primeiro, vamos mesclar o Branch `` ao seu Branch principal (master), então vamos para ela: +``` +git checkout master +``` + +Mescle `` ao master: +``` +git merge master +``` + +Remova `` do seu repositório local: +``` +git branch -d +``` + +Agora você deletou seu Branch local `` e tudo está limpo e arrumado. +Nesse ponto, você ainda deve ter o Branch `` no seu Fork. Antes de deletá-lo, lembre-se que você mandou um Pull Request para o meu repositório a partir desse Branch remoto. Então, a não ser que eu já tenha mesclado o Branch, não o delete. + +Porém, se eu já tiver mesclado seu Branch e você quer deletar o Branch remoto, use: +``` +git push origin --delete +``` + +Agora, você sabe como arrumar seus Branches. +Com o tempo, muitos Commits serão adicionados ao meu repositório público. E os Branches principais (master) da sua máquina local e do seu Fork não estarão mais atualizados. Então, para manter seus repositórios sincronizados com o meu, siga os passos abaixo. + +#### [Mantendo o seu Fork sincronizado com este repositório](keeping-your-fork-synced-with-this-repository.pt_br.md) diff --git a/additional-material/translations/removing-branch-from-your-repository.sl.md b/additional-material/translations/removing-branch-from-your-repository.sl.md new file mode 100644 index 00000000000..21be17418ac --- /dev/null +++ b/additional-material/translations/removing-branch-from-your-repository.sl.md @@ -0,0 +1,30 @@ +# Odstrani vejo s svojega repository-ja + +Če si sledil vodiču do tukaj, sedaj tvoja veja `` ni več uporabna in jo lahko zbrišeš z lokalnega repository-ja. To ni nujno potrebno, vendar ime te veje kaže njen namen obstoja. Ker je opravila svoje delo, jo lahko zbrišeš. + +Najprej združiš `` z glavno ( master ) vejo, zato se postavi vanjo: +``` +git checkout master +``` + +Združi `` z master: +``` +git merge master +``` + +Odstrani `` z lokalnega repository-ja: +``` +git branch -d +``` + +Sedaj si zbrisal `` vejo s svojega računalnika in vse zgleda urejeno. Vendar ta veja še vedno obstaja v tvoji GitHub različici ( fork ). Preden jo zbrišeš tudi tam, vedi da moraš najprej poslati "Pull request" mojemu repository-ju. Tako da, če je še nisem združil v moj repository, te veje na GitHub-u še ne zbriši! + +Če pa je tvoja GitHub veja že združena v moj projekt, in jo želiš zbrisati, uporabi naslednji ukaz: +``` +git push origin --delete +``` + +Sedaj veš kako počistiti neuporabne veje s svojega repository-ja. +S časom bo veliko commit-ov dodanih v moj javni repository, in glavni veji na tvojem računalniku in GitHub različici ne bosta več posodobljeni na zadnjo verzijo. Da bodo vsi tvoji repository-ji sinhronizirani z mojim, sledi korakom v tem vodiču: + +#### [Kako imeti svojo različico sinhronizirano z oddaljenim repository-em](keeping-your-fork-synced-with-this-repository.sl.md) diff --git a/additional-material/translations/resolving-merge-conflicts.ko.md b/additional-material/translations/resolving-merge-conflicts.ko.md new file mode 100644 index 00000000000..a8b103ec93d --- /dev/null +++ b/additional-material/translations/resolving-merge-conflicts.ko.md @@ -0,0 +1,43 @@ +# 병합 충돌이 무엇인가요? + +여러분이 또 다른 브랜치에서 현재 작업중인 브랜치로 병합하고자할 때, 또 다른 변경사항들도 같이 반영되어야 하므로 여러분의 현재 작업중인 파일들에 같이 결합이 이루어지게 됩니다. +만일 이때 두 사람이 같은 파일의 똑 같은 라인을 (각자 다르게)변경했거나 다른 사람이 수정 반영한 곳을 삭제하려고 한다면 Git은 어느 변경사항이 옳은 것인지 쉽게 판단할 수 없습니다. +이때 Git은 여러분 스스로 이 문제를 반드시 해결하도록 충돌이 있음을 파일에 표시합니다. + + +# 병합 충돌은 어떻게 해결하나요? + +병합 충돌이 발생하면 Git은 문제가 되는 부분에 “<<<<<<<< HEAD” 와 “>>>>>>>>>>[other branch name]” 으로 감싸서 표시합니다. + +이때 여러분이 현재 작업중인 브랜치가 먼저 표기됩니다. 꺽쇠기호 뒤를 보면 어느 브랜치에서 변경사항이 반영되었는지 알 수 있습니다. +"=======" 기호는 충돌이 발생한 부분을 각각 구분해줍니다. +여러분이 해야할 일은 바로 위와 같은 충돌표시들을 원하는 코드만 보이도록 깨끗하게 정리하는 것입니다. +따라서 충돌을 발생케한 여러분의 동료와 어느 변경사항이 옳은 것인지 서로 이야기를 나눠야합니다. +여러분의 변경사항이 옳을 수도 있고 그렇지 않을 수도 있습니다. 아니면 양자 모두의 변경사항을 합쳐야만 하는 경우도 있을 수 있겠죠. + + +예시: +``` + <<<<<<< HEAD:mergetest + This is my third line + ======= + This is a fourth line I am adding + >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:mergetest +``` + +<<<<<<<: 병합 충돌이 시작되는 곳을 표시합니다. 여러분이 병합하고자하는 변경한 라인들로 이루어진 부분이 첫번째로 표기됩니다. +=======: 비교하기 위한 구분선을 나타냅니다. 쉽게 차이를 파악할 수 있도록 사용자가 커밋한 변경사항(위)과 병합을 위해 로드된 부분(아래)으로 구분되어 있습니다. +>>>>>>>: 병합 충돌이 발생한 마지막 위치를 표시합니다. + + +Git에서 병합하는 것에 문제가 있는 부분을 일일이 수작업으로 편집해서 병합하면서 충돌문제를 해결합니다. +이는 여러분의 수정사항을 삭제하거나 다른 누군가의 변경사항을 지우는 일이며 또는 이 두 부분을 하나로 합치는 것을 의미합니다. +그리고 해당 파일에서 '<<<<<<<', '=======', 그리고 '>>>>>>>'을 지워야합니다. + +일단 충돌을 해결했다면 `git add`를 실행합니다. +아울러 충돌이 올바르게 해결되었는지 확인하기 위해 반드시 테스트를 수행하는 것을 잊지마십시요. + +병합 충돌을 보다 쉽게 해결하려면 여러분이 사용하는 각각의 IDE에 맞는 적절한 플러그인을 다운로드 받아 설치하세요. + +# 병합을 어떻게 되돌리나요? +병합을 취소하려면 `git merge —abort` 명령을 실행하세요. diff --git a/additional-material/translations/resolving-merge-conflicts.sl.md b/additional-material/translations/resolving-merge-conflicts.sl.md new file mode 100644 index 00000000000..1eb3ad264c6 --- /dev/null +++ b/additional-material/translations/resolving-merge-conflicts.sl.md @@ -0,0 +1,34 @@ +# Kaj je spor pri združevanju? + +Ko poskusiš združiti drugo vejo v vejo v kateri trenutno delaš, vzameš spremembe iz drugega konteksta in jih združiš z datotekami s katerimi trenutno delaš. +Če dve osebi spremenita vrstico v isti datoteki, ali če se ena oseba odloči zbrisati datoteko medtem, ko se jo druga odloči spremeniti, Git ne ve več kaj je pravilno. Git bo označil datoteko kot spor. Spor, ki ga moraš razrešiti preden lahko nadaljuješ z delom. + +# Kako razrešiti spor pri združevanje? + +Ko Git zazna spor pri združevanju, bo mesto problema v datoteku označil tako, da ga bo obdal z: +“<<<<<<<< HEAD” and “>>>>>>>>>>[other branch name]” + +Vsebina za prvo oznako bo izhajala iz tvoje trenutne veje. Nato sledi vrstica z "=======", tej pa sledi vsebina iz veje, ki je v nazkrižju s tvojo. Za tem pridejo znaki ">>>>>" in ime te druge veje. +Naša naloga je da uredimo te vrstice. Ko smo končali, naj bi datoteka izgledala točno tako, kot hočemo da izgleda. Lahko da se bo potrebno posvetovati s sodelavcem, ki je napisal vsebino, ki je v navzkrižju z našo, da se bomo lahko odločili katera koda je prava. Mogoče bo tvoja, mogoče bo njegova - ali pa mešanica obeh. + +Primer: +``` + <<<<<<< HEAD:mergetest + This is my third line + ======= + This is a fourth line I am adding + >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:mergetest +``` + +`<<<<<<<`: Nakazuje začetek vrstic, kjer je spor. Te vrstice so iz tvoje datoteke, ki si jo poskusil združiti. +`=======`: Nakazuje prelomno točko za primerjavo. Razdeli spremembe iz tvojega commit-a (zgoraj) in spremembe nekoga drugega (spodaj) za lažjo predstavo. +`>>>>>>>`: Nakazuje konec vrstic, kjer je spor. + +Spor razrešiš z urejanjem datoteke in ročnim združevanjem delov datoteke, kjer je Git naletel na problem. To lahko pomeni da je potrebno zavreči tvoje spremembe, spremembe nekoga drugega ali pa ustvariti mešanico obeh. Prav tako je potrebno zbrisati '<<<<<<<', '=======', in '>>>>>>>'. + +Ko je bil spor razrešen, uporabi ukaz `git add`. Ne pozabi izvesti teste, s katerimi se prepričaš da je bil spor pravilno razrešen. + +Lahko si tudi namestiš različne plugine, ki so odvisni od tvojega IDE-ja, za lažje reševanje sporov. + +# Kako razveljaviti združitev ( merge )? +Če želiš razveljaviti združitev uporabi ukaz `git merge —abort`. diff --git a/additional-material/translations/resolving-merge-conflicts.vi.md b/additional-material/translations/resolving-merge-conflicts.vi.md new file mode 100644 index 00000000000..b804171f36f --- /dev/null +++ b/additional-material/translations/resolving-merge-conflicts.vi.md @@ -0,0 +1,33 @@ +# Mâu Thuẫn Khi Tích Hợp là gì? + +Khi bạn cố gắng tích hợp một nhánh khác vào nhánh làm việc hiện tại của bạn, bạn đang thực hiện các thay đổi từ bối cảnh khác và kết hợp chúng với các tệp tin hiện tại bạn đang làm việc. +Nếu hai người đã thay đổi cùng một dòng trong cùng một tệp hoặc nếu một người quyết định xóa nó trong khi người kia quyết định sửa đổi nó, Git không thể xác định đâu là phiên bản chính xác. Git sau đó sẽ đánh dấu tệp là có xung đột - điều mà bạn sẽ phải giải quyết trước khi bạn có thể tiếp tục công việc của mình. + +# Làm thế nào để giải quyết xung đột khi tích hợp? + +Khi đối mặt với việc xảy ra xung đột khi tích hợp, git sẽ đánh dấu khu vực có vấn đề trong tệp bằng cách đặt nó vào trong "<<<<<<<<< HEAD" và ">>>>>>>>>>[other branch name]" + +Các nội dung sau điểm đánh dấu đầu tiên bắt nguồn từ nhánh làm việc hiện tại của bạn. Sau dấu ngoặc nhọn, Git cho chúng ta biết những thay đổi đến từ đâu (từ nhánh nào). Dòng có "=======" phân tách hai thay đổi xung đột. Công việc của chúng tôi bây giờ là giải quyết những dòng này: khi chúng ta hoàn thành, tệp sẽ trông chính xác như chúng ta muốn. Nên tham khảo ý kiến của người đồng đội đã viết những thay đổi mâu thuẫn để quyết định phiên bản nào sẽ là bản cuối cùng. Nó có thể là của bạn - hoặc có thể là hỗn hợp giữa hai người. + +Ví dụ: +``` +<<<<<<< HEAD:mergetest + This is my third line + ======= + This is a fourth line I am adding + >>>>>>> 4e2b407f501b68f8588aa645acafffa0224b9b78:mergetest +``` + +`<<<<<<<`: Cho biết nơi bắt đầu của các dòng có xung đột khi tích hợp. Những dòng đầu tiên là các dòng từ tệp tin mà bạn đang thử tích hợp các thay đổi vào. +`=======`: Cho biết điểm phân chia được sử dụng để so sánh các thay đổi. Phân chia các thay đổi mà người dùng đã cam kết (ở trên) đối với các thay đổi đến từ nhánh tích hợp (bên dưới) để thấy rõ sự khác biệt. +`>>>>>>>`: Cho biết kết thúc của các dòng có xung đột khi tích hợp. + +Bạn giải quyết xung đột bằng cách chỉnh sửa tệp và sau đó tích hợp thủ công các phần của tệp mà git gặp sự cố khi tích hợp. Điều này có thể có nghĩa là loại bỏ các thay đổi của bạn hoặc của người khác hoặc đi tới việc kết hợp thay đổi của cả hai. Bạn cũng sẽ cần xóa '<<<<<<<', '=======' và '>>>>>>>' trong tệp. + +Một khi bạn đã giải quyết xung đột, chạy lệnh `git add`. Đừng quên chạy thử nghiệm, vì bạn phải chắc chắn rằng bạn đã giải quyết được xung đột. + +Bạn cũng có thể tải xuống các plugin khác nhau tùy thuộc vào IDE bạn đang sử dụng để có cách dễ dàng hơn để giải quyết xung đột hợp nhất. + +# Làm thế nào để hoàn tác lại tích hợp? + +Nếu bạn muốn hoàn tác lại tích hợp thì bạn có thể thực hiện `git merge —abort` diff --git a/additional-material/translations/reverting-a-commit.ko.md b/additional-material/translations/reverting-a-commit.ko.md new file mode 100644 index 00000000000..c94f408e392 --- /dev/null +++ b/additional-material/translations/reverting-a-commit.ko.md @@ -0,0 +1,35 @@ +## 커밋 되돌리기 + +커밋을 되돌리려면 이전 커밋에서 수행 된 모든 변경 사항을 취소하는 새로운 커밋을 만드는 것입니다. 그것은 git에서 ```CTRL + Z ``` 를 실행하는 것과 같습니다. + +원격 저장소에 푸시하는 모든 커밋에는 SHA(Secure Hash Algorithm)라고 하는 고유한 알파벳 키가 있으므로 git에서 되돌리기가 쉬워집니다. 즉, SHA를 사용하는 한 언제든지 커밋을 되돌릴 수 있습니다. 하지만 그렇게 하면, 당신의 저장소가 엉망이 되지 않도록 조심스럽게 순서대로 배열해야 합니다. + +실행 취소하려는 특정 커밋의 SHA를 선택하려면 지금까지 작성한 모든 커밋의 로그가 도움이 될 것입니다. +이를 위해 다음 명령을 실행합니다: +```git log --oneline ``` +```git log``` 명령만 실행하면 SHA(긴 형식)을 얻을 수 있지만 ```--oneline ``` 플래그를 사용하면 보다 가독성이 좋은(한줄) 방식으로 표시할 수 있습니다. + +이 명령을 실행할 때 표시되는 첫번째 7개의 문자는 축약 커밋 해시라고 합니다. + +예를 들어, 이 저장소에서 ```git log --oneline ``` 을 실행하면 다음과 같은 결과를 얻을 수 있습니다: +For example, here is what I get when I run ```git log --oneline ``` on this repository: +``` +389004d added spacing in title +c1b9fc1 Merge branch 'master' into tutorials +77eaafd added tutorial for reverting a commit +``` + +따라서 ```git log --oneline``` 을 사용하면 SHA의 처음 7개의 문자와 함께 저장소에서 작성한 모든 커밋 목록을 가져올 수 있습니다. + +이제 "added spacing in title"에 대한 커밋을 취소하고 싶다고 가정하고, 다음 단계를 수행하겠습니다. + +* 커밋의 SHA를 복사합니다. 여기서는 ```389004d``` 입니다. +* 그리고 나서 ```git revert 389004d``` 명령을 싱행합니다. + +이렇게 하면 텍스트 편집기가 열리고 커밋 메시지를 편집하라는 메시지가 표시됩니다. 커밋 메시지를 `Revert` 라는 단어로 시작하는 기본 git 메시지로 남겨두거나 원하는대로 메시지를 작성할 수도 있습니다. + +* 다음으로, 텍스트 편집기를 저장하고 닫습니다. +* 커맨드 라인으로 돌아갑니다. +* ```git push origin ``` 을 실행하여 되돌린 변경사항을 Github에 푸시하십시오. + +그리고 바로 변경사항이 원상태로 돌아갈 것입니다. 이 경우에 저장소가 ```c1b9fc1``` 의 상태로 되돌아갑니다. diff --git a/additional-material/translations/reverting-a-commit.sl.md b/additional-material/translations/reverting-a-commit.sl.md new file mode 100644 index 00000000000..7264079505a --- /dev/null +++ b/additional-material/translations/reverting-a-commit.sl.md @@ -0,0 +1,38 @@ +# Povrnitev commit-a + +Povrnitev commit-a pomeni, da ustvarimo nov commit, ki odstrani vse spremembe, ki smo jih napravili v prejšnjem commit-u. Kot da bi naredili ```CTRL + Z ``` v Git-u. + +Povrnitev v Git-u je sorazmerno enostavna, ker je vsak commit, ki ga pošljemo v oddaljen repository, povezan s svojim unikatnim alfanumeričnim SHA (Secure Hash Algorithm) ključem. +To pomeni da lahko povrnemu vsak commit, če le imamo njegov SHA. +V vsakem primeru pa moramo biti previdni pri povračanju, ker si lahko poškodujemo repository. + +Da lahko izberemo SHA točno določenega commit-a, ki ga hočemo odstraniti, nam zelo prav pride seznam vseh commit-ov, ki smo jih napravili. +Ta seznam dobimo s tem ukazom: +```git log --oneline ``` +Ukaz ```git log``` bi nam prav tako vrnil SHA, vendar v daljši obliki izpisa. +Uporaba zastavice ```--oneline ``` Git-u pove da hočemo pregleden izpis v eni vrstici. + +Prvih 7 znakov v vsaki vrstici izpisa se imenuje skrajšani hash commit-a. + +Za primer, to je izpis ```git log --oneline ``` za ta repository: +``` +389004d added spacing in title +c1b9fc1 Merge branch 'master' into tutorials +77eaafd added tutorial for reverting a commit +``` + +To nam torej pokaže, da lahko z ```git log --oneline```, pridobimo seznam vseh commit-ov narejenih v repository-ju s prvimi 7 znaki njihovih SHA. + +No, sedaj lahko poskusimo zbrisati commit "added spacing in title" z naslednjimi koraki: + +* Kopiraj SHA commit-a, v tem primeru ```389004d``` +* Potem uporabi ukaz ```git revert 389004d``` + +Sedaj se zažene naš urejevalnik besedila in nas pozove naj uredimo komentar commit-a. +Lahko se odločiš, da pustiš privzeto sporočilo Git-a, ki se začne z besedo `Revert`, ali pa spremeniš komentar po svojih željah. + +* Nato shranimo in zapremo urejevalnik besedila. +* Vrnemo se v ukazno vrstico. +* Uporabimo ukaz ```git push origin ``` da pošljemo spremembe na GitHub. + +In to je to, spremembe bodo odstranjene. V tem primeru bi se moj repository povrnil na stanje v commit-u ```c1b9fc1```. \ No newline at end of file diff --git a/additional-material/translations/squashing-commits.sl.md b/additional-material/translations/squashing-commits.sl.md new file mode 100644 index 00000000000..2f6a40baafe --- /dev/null +++ b/additional-material/translations/squashing-commits.sl.md @@ -0,0 +1,94 @@ +# Kaj je stiskanje? + +V Git-u stiskanje ( squashing ) pomeni popravljanje zgodovine svojih commit-ov, tako da na koncu ostaneš samo z enim commit-om in enim komentarjem narejenih sprememb. +To je običajni postopek v odprto kodnih projektih, ker je velik del zgodovine vsake veje pomemben samo programerju, ki jo je ustvaril. Poleg tega na ta način poenostavimo sledenje izvedenih sprememb in jih tudi lažje povrnemo v prejšnje stanje, če je to potrebno. + +# Kako stisneš commit-e? + +Najprej uporabimo ukaz `git log` da lahko pregledamp commit-e v svoji veji, ki bi jih rad združili ( merge ). + +``` +git log +``` + +Videti bi morali serijo commit-ov, kot na primer: + +``` +commit blablabla +Author: omguhh +Date: 10/10/20 + Commit message 1 + +commit blablabla2 +Author: omguhh +Date: 10/10/20 + Commit message 2 +``` + +Sedaj, ko vidimo commit-e, ki jih želimo združiti v enega, lahko začnemo tako da uporabimo ukaz ```git rebase```. Predvidevam da že poznaš ukaz ```git rebase``` in lahko začnemo stiskanje commit-ov v interaktivnem načinu ukaza `git rebase`, ki ga aktiviramo tako: + +``` +git rebase -i +``` +V interaktivnem načinu ukaza rebase lahko določimo začetno in končno točko do katere nazaj želimo iti. HEAD je začetna točka, "~2" pa pomeni da gremo dva commita nazaj v zgodovino. Ukaz se uporabi takole: + +``` +git rebase -i HEAD~2 +``` + +Ko uporabimo ta ukaz, se nam bo prikazalo nekaj podobnega tem vrsticam: + +``` +pick blablabla Changing test01.txt file +pick blablabla2 Adding dummy01.txt file + +# +# Commands: +# p, pick = use commit +# r, reword = use commit, but edit the commit message +# e, edit = use commit, but stop for amending +# s, squash = use commit, but meld into previous commit +# f, fixup = like "squash", but discard this commit's log message +# x, exec = run command (the rest of the line) using shell +# +# These lines can be re-ordered; they are executed from top to bottom. +# +# If you remove a line here THAT COMMIT WILL BE LOST. +# +# However, if you remove everything, the rebase will be aborted. +# +# Note that empty commits are commented out +``` + +Ukazi navedeni v zgornjem sporočilu: +- p, pick = uporabi commit +- r, reword = uporabi commit, vendar uredi komentar +- e, edit = uporabi commit, vendar se ustavi za spremembo +- s, squash = uporabi commit, vendar ga stisni v prejšnji commit +- f, fixup = enak kot "squash", vendar zavrzi komentar tega commit-a +- x, exec = zaženi ukaz ( preostanek vrstice ) v shell-u + +To pomeni da, če želimo stisniti ```blablabla2``` v ```blablablabla```, bi zgornje sporočilo spremenili tako: + +``` +pick blablabla Changing test01.txt file +squash blablabla2 Adding dummy01.txt file + +``` + +Če gre vse po planu, dobimo rezultat, ki zgleda takole: + +``` +# This is a combination of 2 commits. +# The first commit's message is: +commit message 1 + +# This is the 2nd commit message: + +commit message 2 +``` + +To sporočilo lahko po želji spremenimo preden zapremo urejevalnik besedila, kar shrani spremembe. + +Če še enkrat uporabimo ukaz `git log`, bi morali dobiti komentar commit-a, ki smo ga vnesli preden smo zaprli urejevalnik besedila, in commit-i bi morali biti združeni v enega. + diff --git a/additional-material/translations/stashing-a-file.sl.md b/additional-material/translations/stashing-a-file.sl.md new file mode 100644 index 00000000000..00248203439 --- /dev/null +++ b/additional-material/translations/stashing-a-file.sl.md @@ -0,0 +1,136 @@ +# Shranjevanje za pozneje ( Stashing ) + +Kaj storiti, če delaš na velikem projektu, in moraš nenadoma zamenjati vejo, na kateri trenutno delaš, za neko drugo vejo? Koda, na kateri si delal, ni dokončana in dokler je ne preveriš dobro, ne želiš izvesti commit. Vendar se ne moreš premakniti na drugo vejo brez da bi izvedel commit, Git ti ne pusti prekiniti delovni tok ( workflow ). Kaj storiti? Kako preprečiti nepotreben commit in hkrati preskočiti na drugo vejo? Na to vprašanje odgovarja ta vodič. + +## Shranjevanje svojega dela + +Predpostavimo da delaš na veji projekta, kjer si naredil nekaj spremembe. Če uporabiš ukaz ```git status```, lahko vidiš kje so bile spremembe narejene. + +``` +$ git status +# On branch master +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: index.html +# +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: lib/simplegit.rb +# +``` +Sedaj se želiš prestaviti na drugo vejo, vendar še nočeš izvesti commit s temi spremembami. Zato bi shranil spremembe za pozneje ( stash ). +Spremembe lahko shraniš na svoj stack z uporabo ukaza ```git stash```: + +``` +$ git stash +Saved working directory and index state \ + "WIP on master: 049d078 added the index file" +HEAD is now at 049d078 added the index file +(To restore them type "git stash apply") +``` + +Sedaj je tvoje delovno okolje ( working directory ) čisto. To lahko preveriš z uporabo ukaza ```git status```: + +``` +$ git status +# On branch master +nothing to commit, working directory clean +``` + +Sedaj se lahko prestaviš na katerokoli vejo in delaš naprej; tvoje shranjene spremembe so shranjene na stack-u. Spremembe, ki so shranjene na stack-u, si lahko ogledaš z uporabo ukaza ```git stash list```: + +``` +$ git stash list +stash@{0}: WIP on master: 049d078 added the index file +stash@{1}: WIP on master: c264051 Revert "added file_size" +stash@{2}: WIP on master: 21d80a5 added number to log +``` + +V primeru da želiš uveljaviti (re-apply) spremembe, ki si jih ravnokar shranil, lahko uporabiš ukaz ```git stash apply```. S tem ukazom lahko uveljaviš zadnjo shranjeno spremembo. Če želiš uveljaviti katerokoli drugo spremembo, jo moraš točno določiti: ```git stash apply ```, kjer je `````` ime spremembe, ki jo želiš uveljaviti. + +``` +$ git stash apply +# On branch master +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: index.html +# modified: lib/simplegit.rb +# +``` + +Git je sedaj spremenil datoteko, ki smo jo povrnili v prvotno stanje, ko smo spremembe shranili v stack. V tem primeru smo imeli čisto delovno okolje, ko smo poskusili uveljaviti stash, in uveljavili smo jih na isti veji, s katere smo jih shranili. Nič od tega, čisto delovno okolje in ista veja, ni nujno da uveljavimo spremembe iz stasha. Spremembe lahko shranimo na eni veji, se prestavimo na drugo vejo in tam uveljavimo iste spremembe. Lahko bi tudi spremenili ali odstranili datoteke v svojem delovnem okolju, ko bi uveljavili stash. V primeru da pride do sporov pri združevanju shranjenih sprememb v obstoječe datoteke, bo Git te spore javil. + +Spremembe so bile uveljavljene, vendar datoteka, ki je bila pripravljena za commit, sedaj ni več pripravljena. Da dosežemo še to, moramo uporabiti ukaz ```git stash apply``` z ```--index```, da sporočimo ukazu da mora uveljaviti tudi to stanje. Ko uporabimo ta ukaz, se vrnemo v točno tako stanje, kot je bilo na začetku: + +``` +$ git stash apply --index +# On branch master +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: index.html +# +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: lib/simplegit.rb +# +``` + +Ukaz `apply` samo uveljavi spremembe, ki so bile shranjene, vendar te še vedno ostanejo na stack-u. Z ukazom ```git stash list``` si lahko prikažeš vsebino stack-a. Da nekaj z njega zbrišemo, uporabimo ukaz ```git stash drop```, ki mu dodamo ime stash-a. + +``` +$ git stash list +stash@{0}: WIP on master: 049d078 added the index file +stash@{1}: WIP on master: c264051 Revert "added file_size" +stash@{2}: WIP on master: 21d80a5 added number to log +$ git stash drop stash@{0} +Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43) +``` + +Z ukazom ```git stash pop``` lahko hkrati uveljavimo spremembe in jih odstranimo s stack-a. + +## Razveljavljanje Stash-a + +V nekaterih primerih hočeš uveljaviti shranjene spremembe, nekaj narediti, in razveljaviti spremembe, ki so prišle iz stash-a. Git nima ukaza ```git unapply```, vendar je možno doseči isti učinek z kombiniranjem ukazov. Najprej prikažemo željeni stash in ga nato vzratno uveljavimo: + +```$ git stash show -p stash@{0} | git apply -R``` + +Če ne določimo, kateri stash želimo, Git predvideva da želimo zadnjega: + +```$ git stash show -p | git apply -R``` + +Lahko ustvariš alias in v bistvu dodaš ukaz ```stash-unapply``` v svoj Git. Na primer: + +``` +$ git config --global alias.stash-unapply '!git stash show -p | git apply -R' +$ git stash apply +$ #... work work work +$ git stash-unapply +``` + +## Ustvari vejo iz Stash-a + +Če si shranil spremembe in jih nekaj časa pustil pri miru, vmes pa delal naprej na veji s katere si jih shranil, se ti lahko naredi da boš imel težave z uveljaljanjem sprememb. Če uveljavljaš spremembe na datoteki, ki si jo vmes spremenil, boš dobil spor pri združevanju in ga boš moral razrešiti. Obstaja lažji način povračanja sprememb iz stash-a z uporabo ukaza ```git stash branch```, ki ustvari novo vejo, pridobi commit na katerem si bil, ko si shranil spremembe, na njem uveljavi spremembe in potem zbriše stash, če je bil uspešno uveljavljen: + +``` +$ git stash branch testchanges +Switched to a new branch "testchanges" +# On branch testchanges +# Changes to be committed: +# (use "git reset HEAD ..." to unstage) +# +# modified: index.html +# +# Changes not staged for commit: +# (use "git add ..." to update what will be committed) +# +# modified: lib/simplegit.rb +# +Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359) +``` + +To je prikladna bližnjica s katero lahko enostavo pridobimo shranjene spremembe in jih uporabimo v novi veji. \ No newline at end of file diff --git a/additional-material/translations/undoing-a-commit.ko.md b/additional-material/translations/undoing-a-commit.ko.md new file mode 100644 index 00000000000..e7fedb0f72e --- /dev/null +++ b/additional-material/translations/undoing-a-commit.ko.md @@ -0,0 +1,59 @@ +## 로컬 커밋 되돌리기 + +로컬에서 커밋을 위해 스테이징 영역에 추가한 작업 내용을 되돌리기 위해서는 다음 명령을 실행합니다. +``` +git reset +``` + +위 명령어는 수정한 코드가 반영된 스테이징 영역을 가장 최근에 반영한 커밋상태로 되돌립니다. +하지만 여러분의 작업 디렉토리에 수정한 내용들은 변경되지 않습니다. 따라서 여러분이 수정한 소스를 다시 커밋할 수 있습니다. +만일 이미 스테이징 영역에 반영된 수정한 파일들 중에서 하나의 파일만 커밋에서 제거하기를 원할 경우, 아래 명령을 실행합니다. + +``` +git reset +``` +이 명령어는 스테이징 영역에서 해당 파일만 제거합니다. 그러나 작업 디렉토리에는 변경된 파일 상태 그대로 남아 있습니다. + +다음은 ```git reset``` 사용법에 관한 예제입니다. +``` +# 먼저 index.php 와 tutorial.php 파일을 수정합니다. +# 스테이징 영역에 파일을 추가합니다. +$ git add . +# 두 파일을 각각 커밋해야하므로 +# tutorial.php 파일을 스테이징 영역에서 제거합니다. +$ git reset tutorial.php +# index.php 파일을 먼저 커밋합니다. +$ git commit -m "Changed index.php" +# 다음으로 tutorial.php 파일을 커밋합니다. +$ git add tutorial.php +$ git commit -m "Changed tutorial.php" +``` + +로컬 저장소에 문제가 생겨 여러분의 코드를 마지막 커밋 상태로 모두 되돌리고 싶다면 아래 명령을 실행할 수 있습니다. +``` +git reset --hard +``` + +이 명령어는 스테이징 영역을 마지막 커밋 상태로 되돌리는 것 뿐만 아니라 여러분의 로컬에 변경된 파일도 되돌릴 수 있습니다. +```--hard``` 모드는 Git으로 하여금 작업 디렉토리에 대한 변경들도 되돌릴 수 있도록 합니다. +따라서 로컬에서 개발한 모든 개발 내용을 초기화해도 되는지 반드시 확인 후 실행하셔야 합니다. + +다음은 ```git reset --hard``` 사용에 관한 예제입니다. +``` +# 엉뚱한 실험을 시작하기로 결정했습니다. +# 먼저 'crazy.php' 파일을 만들고 코드를 추가합니다. +# 그리고 crazy.php 파일을 커밋합니다. +$ git add crazy.php +$ git commit -m "Started a crazy dev" +# crazy.php 파일을 다시 수정하고 기타 여러 파일들을 생성하고 수정합니다. +# 그리고 수정한 모든 파일을 스테이징 영역에 추가하고 커밋합니다. +$ git add . +$ git commit -m "Continued dev" +# 테스트하고 마칩니다. +# 실험하기 전 상태로 되돌리기 위해 모든 수정사항을 제거합니다. +$ git reset --hard HEAD~2 +``` +```git reset --hard HEAD~2``` 명령어는 현재 브랜치에서 여러분이 수정한 이전의 커밋들 중에 2번째 커밋 포인트 상태로 이동함과 동시에 해당 커밋들에 대한 변경사항들이 이전 상태로 복구됩니다. 그리고 프로젝트 히스토리에서 이전에 추가된 2개의 스냅샷이 제거됩니다. + +P.s. 만일 여러분의 공유 저장소로 이미 push를 완료한 상태에서 ```git reset --hard``` 명령을 실행할 경우, 해당 저장소를 사용하는 모든 사람들에게 문제를 일으킬 수 있으므로 절대 실행해서는 안됩니다. + diff --git a/additional-material/translations/undoing-a-commit.sl.md b/additional-material/translations/undoing-a-commit.sl.md new file mode 100644 index 00000000000..232f04c497b --- /dev/null +++ b/additional-material/translations/undoing-a-commit.sl.md @@ -0,0 +1,55 @@ +# Razveljavljanje lokalnega commit-a + +Vse kar rabiš storiti, da razveljaviš lokalni commit, je: +``` +git reset +``` +Ta ukaz bo resetiral stanje v čakalnici na tvoj zadnji commit, vendar bodo spremembe ostale v delovnem okolju. Če želiš, lahko ponovno ustvariš commit s temi spremembami. +Lahko pa tudi odstraniš samo eno datoteko s svojega prejšnjega commit-a. Uporabiš ukaz: +``` +git reset +``` +Ukaz bo odstranil samo določeno datoteko s čakalnice, vendar bodo spremembe narejene na datoteki ostale. + +Primer uporabe ```git reset```: +``` +# Make changes in index.php and tutorial.php +# Add files into the staging area +$ git add . +# Remembered both files need to be committed separately +# Unstage tutorial.php +$ git reset tutorial.php +# Commit index.php first +$ git commit -m "Changed index.php" +# Commit tutorial.php now +$ git add tutorial.php +$ git commit -m "Changed tutorial.php" +``` + +Predpostavimo da si pokvaril svoj lokalni repository in ga želiš resetirati na svoj zadnji commit. +Lahko uporabiš spodnji ukaz: +``` +git reset --hard +``` +Ukaz bo izpraznil čakalnico in tudi povrnil vse spremembe v datotekah na stanje v zadnjem commit-u. +Možnost ```--hard``` pove Git-u da mora odstraniti tudi vse spremembe v delovnem okolju. +Ta ukaz uporabi samo takrat, ko si prepričan da želiš odstraniti vse spremembe nastale od zadnjega commit-a! + +Primer uporabe ukaza ```git reset --hard```: +``` +# Decided to start a crazy experiment +# Create a new file 'crazy.php' and add some code to it +# Commit crazy.php +$ git add crazy.php +$ git commit -m "Started a crazy dev" +# Edit crazy.php file again and changed a lot other files +# Commit all tracked files +$ git add . +$ git commit -m "Continued dev" +# Tested and things went out of hand +# Decided to remove the whole thing +$ git reset --hard HEAD~2 +``` +Ukaz ```git reset --hard HEAD~2``` premakne trenutno vejo nazaj za 2 commit-a in hkrati povrne vse spremembe na to točko. Odstrani tudi 2 posnetka, ki smo ju ravnokar ustvarili iz zgodovine projekta. + +P.s: Nikoli ne izvedi ```git reset --hard``` , če si že poslal svoje commit-e v skupni repository, ker boš s tem ustvaril probleme vsem, ki uporabljajo ta repository! diff --git a/assets/Branch.png.png b/assets/Branch.png.png new file mode 100644 index 00000000000..0808c81e99c Binary files /dev/null and b/assets/Branch.png.png differ diff --git a/assets/Switch Branch and Tag.png b/assets/Switch Branch and Tag.png new file mode 100644 index 00000000000..9002a258dd3 Binary files /dev/null and b/assets/Switch Branch and Tag.png differ diff --git a/assets/catalan1.png b/assets/catalan1.png new file mode 100644 index 00000000000..306c54b80d0 Binary files /dev/null and b/assets/catalan1.png differ diff --git a/assets/clone.png b/assets/clone.png new file mode 100644 index 00000000000..2d28a33bfb0 Binary files /dev/null and b/assets/clone.png differ diff --git a/assets/compare-and-pull.png b/assets/compare-and-pull.png new file mode 100644 index 00000000000..87cb164e6eb Binary files /dev/null and b/assets/compare-and-pull.png differ diff --git a/assets/copy-to-clipboard.png b/assets/copy-to-clipboard.png new file mode 100644 index 00000000000..9251734a36a Binary files /dev/null and b/assets/copy-to-clipboard.png differ diff --git a/assets/dt-branch1.png b/assets/dt-branch1.png new file mode 100644 index 00000000000..d5021c07f28 Binary files /dev/null and b/assets/dt-branch1.png differ diff --git a/assets/dt-branch2.png b/assets/dt-branch2.png new file mode 100644 index 00000000000..74154998a51 Binary files /dev/null and b/assets/dt-branch2.png differ diff --git a/assets/dt-branch3.png b/assets/dt-branch3.png new file mode 100644 index 00000000000..2399e7bd952 Binary files /dev/null and b/assets/dt-branch3.png differ diff --git a/assets/dt-clone1.png b/assets/dt-clone1.png new file mode 100644 index 00000000000..02774ba6604 Binary files /dev/null and b/assets/dt-clone1.png differ diff --git a/assets/dt-clone2.png b/assets/dt-clone2.png new file mode 100644 index 00000000000..e1218cf5ca7 Binary files /dev/null and b/assets/dt-clone2.png differ diff --git a/assets/dt-clone3.png b/assets/dt-clone3.png new file mode 100644 index 00000000000..c7fc251a72f Binary files /dev/null and b/assets/dt-clone3.png differ diff --git a/assets/dt-clone4.png b/assets/dt-clone4.png new file mode 100644 index 00000000000..973c559bed3 Binary files /dev/null and b/assets/dt-clone4.png differ diff --git a/assets/dt-commit1.png b/assets/dt-commit1.png new file mode 100644 index 00000000000..b0f1dfa77ae Binary files /dev/null and b/assets/dt-commit1.png differ diff --git a/assets/dt-commit2.png b/assets/dt-commit2.png new file mode 100644 index 00000000000..57f5988b3a0 Binary files /dev/null and b/assets/dt-commit2.png differ diff --git a/assets/dt-publish1.png b/assets/dt-publish1.png new file mode 100644 index 00000000000..b4adef9635d Binary files /dev/null and b/assets/dt-publish1.png differ diff --git a/assets/dt-publish2.png b/assets/dt-publish2.png new file mode 100644 index 00000000000..6ba4c7a2142 Binary files /dev/null and b/assets/dt-publish2.png differ diff --git a/assets/dt-status.png b/assets/dt-status.png new file mode 100644 index 00000000000..872081b7565 Binary files /dev/null and b/assets/dt-status.png differ diff --git a/assets/dt-sync.png b/assets/dt-sync.png new file mode 100644 index 00000000000..1a0466c8396 Binary files /dev/null and b/assets/dt-sync.png differ diff --git a/assets/dt-sync2.png b/assets/dt-sync2.png new file mode 100644 index 00000000000..a269dcd3fbc Binary files /dev/null and b/assets/dt-sync2.png differ diff --git a/assets/dt-sync3.png b/assets/dt-sync3.png new file mode 100644 index 00000000000..9004bf62d4c Binary files /dev/null and b/assets/dt-sync3.png differ diff --git a/assets/dt1-clonetodesktop.png b/assets/dt1-clonetodesktop.png new file mode 100644 index 00000000000..4bd0c57b95e Binary files /dev/null and b/assets/dt1-clonetodesktop.png differ diff --git a/assets/dt1-commit1.png b/assets/dt1-commit1.png new file mode 100644 index 00000000000..1fa81f381f5 Binary files /dev/null and b/assets/dt1-commit1.png differ diff --git a/assets/dt1-commit2.png b/assets/dt1-commit2.png new file mode 100644 index 00000000000..9bea172f590 Binary files /dev/null and b/assets/dt1-commit2.png differ diff --git a/assets/dt1-create-branch-name.png b/assets/dt1-create-branch-name.png new file mode 100644 index 00000000000..31489bb364b Binary files /dev/null and b/assets/dt1-create-branch-name.png differ diff --git a/assets/dt1-create-branch.png b/assets/dt1-create-branch.png new file mode 100644 index 00000000000..2753ea0c563 Binary files /dev/null and b/assets/dt1-create-branch.png differ diff --git a/assets/dt1-downloaded.png b/assets/dt1-downloaded.png new file mode 100644 index 00000000000..2de5201a5b5 Binary files /dev/null and b/assets/dt1-downloaded.png differ diff --git a/assets/dt1-open-githubdesktop.png b/assets/dt1-open-githubdesktop.png new file mode 100644 index 00000000000..d50ee62454e Binary files /dev/null and b/assets/dt1-open-githubdesktop.png differ diff --git a/assets/dt1-publish1.png b/assets/dt1-publish1.png new file mode 100644 index 00000000000..576933e216b Binary files /dev/null and b/assets/dt1-publish1.png differ diff --git a/assets/dt1-sign-in.png b/assets/dt1-sign-in.png new file mode 100644 index 00000000000..656914fa9b3 Binary files /dev/null and b/assets/dt1-sign-in.png differ diff --git a/assets/dt1-status.png b/assets/dt1-status.png new file mode 100644 index 00000000000..46e9226e5fb Binary files /dev/null and b/assets/dt1-status.png differ diff --git a/assets/fork.png b/assets/fork.png new file mode 100644 index 00000000000..d584b488748 Binary files /dev/null and b/assets/fork.png differ diff --git a/assets/git-status.png b/assets/git-status.png new file mode 100644 index 00000000000..90751cdf791 Binary files /dev/null and b/assets/git-status.png differ diff --git a/assets/gk-branch.png b/assets/gk-branch.png new file mode 100644 index 00000000000..aa45098dea3 Binary files /dev/null and b/assets/gk-branch.png differ diff --git a/assets/gk-clone.png b/assets/gk-clone.png new file mode 100644 index 00000000000..c4d18ffcdfe Binary files /dev/null and b/assets/gk-clone.png differ diff --git a/assets/gk-commit.png b/assets/gk-commit.png new file mode 100644 index 00000000000..10c41859d39 Binary files /dev/null and b/assets/gk-commit.png differ diff --git a/assets/gk-edit.png b/assets/gk-edit.png new file mode 100644 index 00000000000..18e677577b3 Binary files /dev/null and b/assets/gk-edit.png differ diff --git a/assets/gk-icon.png b/assets/gk-icon.png new file mode 100644 index 00000000000..f6df8c6e329 Binary files /dev/null and b/assets/gk-icon.png differ diff --git a/assets/gk-login.png b/assets/gk-login.png new file mode 100644 index 00000000000..e30946c92d2 Binary files /dev/null and b/assets/gk-login.png differ diff --git a/assets/gk-origin.png b/assets/gk-origin.png new file mode 100644 index 00000000000..59645ce3dc0 Binary files /dev/null and b/assets/gk-origin.png differ diff --git a/assets/gk-push.png b/assets/gk-push.png new file mode 100644 index 00000000000..6ca99e3ffb0 Binary files /dev/null and b/assets/gk-push.png differ diff --git a/assets/gk-stage.png b/assets/gk-stage.png new file mode 100644 index 00000000000..20f4e3dadb0 Binary files /dev/null and b/assets/gk-stage.png differ diff --git a/assets/join-slack-team.png b/assets/join-slack-team.png new file mode 100644 index 00000000000..81f0608c2fc Binary files /dev/null and b/assets/join-slack-team.png differ diff --git a/assets/pirate.png b/assets/pirate.png new file mode 100644 index 00000000000..b577b8c198e Binary files /dev/null and b/assets/pirate.png differ diff --git a/assets/sourcetree-1-main.png b/assets/sourcetree-1-main.png new file mode 100644 index 00000000000..d9c9f416fb1 Binary files /dev/null and b/assets/sourcetree-1-main.png differ diff --git a/assets/sourcetree-10-pushing.png b/assets/sourcetree-10-pushing.png new file mode 100644 index 00000000000..2c370e25ab4 Binary files /dev/null and b/assets/sourcetree-10-pushing.png differ diff --git a/assets/sourcetree-2-main-connect.png b/assets/sourcetree-2-main-connect.png new file mode 100644 index 00000000000..d785f0d5d87 Binary files /dev/null and b/assets/sourcetree-2-main-connect.png differ diff --git a/assets/sourcetree-3-accounts.png b/assets/sourcetree-3-accounts.png new file mode 100644 index 00000000000..93baa1bf680 Binary files /dev/null and b/assets/sourcetree-3-accounts.png differ diff --git a/assets/sourcetree-4-accounts-add.png b/assets/sourcetree-4-accounts-add.png new file mode 100644 index 00000000000..a6a0a60876f Binary files /dev/null and b/assets/sourcetree-4-accounts-add.png differ diff --git a/assets/sourcetree-5-cloning.png b/assets/sourcetree-5-cloning.png new file mode 100644 index 00000000000..e0fb5d965be Binary files /dev/null and b/assets/sourcetree-5-cloning.png differ diff --git a/assets/sourcetree-6-cloning-confirm.png b/assets/sourcetree-6-cloning-confirm.png new file mode 100644 index 00000000000..7dd9728c280 Binary files /dev/null and b/assets/sourcetree-6-cloning-confirm.png differ diff --git a/assets/sourcetree-7-branching.png b/assets/sourcetree-7-branching.png new file mode 100644 index 00000000000..d1e21863af1 Binary files /dev/null and b/assets/sourcetree-7-branching.png differ diff --git a/assets/sourcetree-8-viewing-changed-files.png b/assets/sourcetree-8-viewing-changed-files.png new file mode 100644 index 00000000000..04f422d9b75 Binary files /dev/null and b/assets/sourcetree-8-viewing-changed-files.png differ diff --git a/assets/sourcetree-9-committing.png b/assets/sourcetree-9-committing.png new file mode 100644 index 00000000000..407b438cfea Binary files /dev/null and b/assets/sourcetree-9-committing.png differ diff --git a/assets/sourcetree-logo.png b/assets/sourcetree-logo.png new file mode 100644 index 00000000000..9fe7dc39ca2 Binary files /dev/null and b/assets/sourcetree-logo.png differ diff --git a/assets/submit-pull-request.png b/assets/submit-pull-request.png new file mode 100644 index 00000000000..d11098ab594 Binary files /dev/null and b/assets/submit-pull-request.png differ diff --git a/assets/triangle_workflow.png b/assets/triangle_workflow.png new file mode 100644 index 00000000000..1764ec2680a Binary files /dev/null and b/assets/triangle_workflow.png differ diff --git a/assets/triangle_workflow.pt_br.png b/assets/triangle_workflow.pt_br.png new file mode 100644 index 00000000000..0268dc48ec4 Binary files /dev/null and b/assets/triangle_workflow.pt_br.png differ diff --git a/assets/vs2017-01-clone1.png b/assets/vs2017-01-clone1.png new file mode 100644 index 00000000000..69483529e45 Binary files /dev/null and b/assets/vs2017-01-clone1.png differ diff --git a/assets/vs2017-02-clone2.png b/assets/vs2017-02-clone2.png new file mode 100644 index 00000000000..17ae89777ac Binary files /dev/null and b/assets/vs2017-02-clone2.png differ diff --git a/assets/vs2017-03-clone3.png b/assets/vs2017-03-clone3.png new file mode 100644 index 00000000000..4618e453ff4 Binary files /dev/null and b/assets/vs2017-03-clone3.png differ diff --git a/assets/vs2017-04-branch1.png b/assets/vs2017-04-branch1.png new file mode 100644 index 00000000000..327d730e8c9 Binary files /dev/null and b/assets/vs2017-04-branch1.png differ diff --git a/assets/vs2017-05-branch2.png b/assets/vs2017-05-branch2.png new file mode 100644 index 00000000000..f5c0183a947 Binary files /dev/null and b/assets/vs2017-05-branch2.png differ diff --git a/assets/vs2017-06-branch3.png b/assets/vs2017-06-branch3.png new file mode 100644 index 00000000000..30452b3ed2c Binary files /dev/null and b/assets/vs2017-06-branch3.png differ diff --git a/assets/vs2017-07-branch4.png b/assets/vs2017-07-branch4.png new file mode 100644 index 00000000000..02f3ce52eac Binary files /dev/null and b/assets/vs2017-07-branch4.png differ diff --git a/assets/vs2017-08-change1.png b/assets/vs2017-08-change1.png new file mode 100644 index 00000000000..3dc4c233ebb Binary files /dev/null and b/assets/vs2017-08-change1.png differ diff --git a/assets/vs2017-09-commit1.png b/assets/vs2017-09-commit1.png new file mode 100644 index 00000000000..251c73883da Binary files /dev/null and b/assets/vs2017-09-commit1.png differ diff --git a/assets/vs2017-10-commit2.png b/assets/vs2017-10-commit2.png new file mode 100644 index 00000000000..7577ae33285 Binary files /dev/null and b/assets/vs2017-10-commit2.png differ diff --git a/assets/vs2017-11-commit3.png b/assets/vs2017-11-commit3.png new file mode 100644 index 00000000000..7d468399082 Binary files /dev/null and b/assets/vs2017-11-commit3.png differ diff --git a/assets/vs2017-12-commit4.png b/assets/vs2017-12-commit4.png new file mode 100644 index 00000000000..38ed33219d3 Binary files /dev/null and b/assets/vs2017-12-commit4.png differ diff --git a/assets/vs2017-13-commit5.png b/assets/vs2017-13-commit5.png new file mode 100644 index 00000000000..248c9c9078b Binary files /dev/null and b/assets/vs2017-13-commit5.png differ diff --git a/assets/vs2017-14-commit6.png b/assets/vs2017-14-commit6.png new file mode 100644 index 00000000000..7380c4715e4 Binary files /dev/null and b/assets/vs2017-14-commit6.png differ diff --git a/assets/vscode-2018-08-branch.png b/assets/vscode-2018-08-branch.png new file mode 100644 index 00000000000..0f5203b56bc Binary files /dev/null and b/assets/vscode-2018-08-branch.png differ diff --git a/assets/vscode-2018-08-changes.png b/assets/vscode-2018-08-changes.png new file mode 100644 index 00000000000..b2790d66412 Binary files /dev/null and b/assets/vscode-2018-08-changes.png differ diff --git a/assets/vscode-2018-08-clone.png b/assets/vscode-2018-08-clone.png new file mode 100644 index 00000000000..6839c4c8003 Binary files /dev/null and b/assets/vscode-2018-08-clone.png differ diff --git a/assets/vscode-2018-08-clone1.png b/assets/vscode-2018-08-clone1.png new file mode 100644 index 00000000000..cff76d5443a Binary files /dev/null and b/assets/vscode-2018-08-clone1.png differ diff --git a/assets/vscode-2018-08-clone2.png b/assets/vscode-2018-08-clone2.png new file mode 100644 index 00000000000..556ae098968 Binary files /dev/null and b/assets/vscode-2018-08-clone2.png differ diff --git a/assets/vscode-2018-08-clone3.png b/assets/vscode-2018-08-clone3.png new file mode 100644 index 00000000000..10362f67123 Binary files /dev/null and b/assets/vscode-2018-08-clone3.png differ diff --git a/assets/vscode-2018-08-commit.png b/assets/vscode-2018-08-commit.png new file mode 100644 index 00000000000..326c326f9e1 Binary files /dev/null and b/assets/vscode-2018-08-commit.png differ diff --git a/assets/vscode-2018-08-commit1.png b/assets/vscode-2018-08-commit1.png new file mode 100644 index 00000000000..37083970c9f Binary files /dev/null and b/assets/vscode-2018-08-commit1.png differ diff --git a/assets/vscode-2018-08-gh-auth.png b/assets/vscode-2018-08-gh-auth.png new file mode 100644 index 00000000000..7bf074382a3 Binary files /dev/null and b/assets/vscode-2018-08-gh-auth.png differ diff --git a/assets/vscode-2018-08-push.png b/assets/vscode-2018-08-push.png new file mode 100644 index 00000000000..a1c705bb467 Binary files /dev/null and b/assets/vscode-2018-08-push.png differ diff --git a/github-desktop-old-version-tutorial.md b/github-desktop-old-version-tutorial.md new file mode 100644 index 00000000000..a64ec3dba11 --- /dev/null +++ b/github-desktop-old-version-tutorial.md @@ -0,0 +1,121 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +|GitHub Desktop|GitHub Desktop Edition| +|---|---| + +It's hard. It's always hard the first time you do something. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are, the better you learn. If you are looking for making your first contribution just follow the simple steps below. We promise you, it will be fun. + +fork this repository + +If you don't have GitHub Desktop on your machine, [install it](https://desktop.github.com/). + +## Fork this repository + +Fork this repo by clicking on the fork button on the top of this page. +This will create of copy of this repository in your account. + +## Clone the repository + +Now clone this repo to your machine. + +Open the GitHub Desktop app and click on the `+` on the top left. + +clone this repository + +If it is not already selected, click on `Clone`. Then choose first-contributions and then click on `Clone first-contributions` + +clone this repository + +Choose the directory on your machine you would like to clone first-contributions into + +clone this repository + +Now you have copied the contents of the first-contributions repository in github to your computer. + +## Create a branch + +Now create a branch by clicking on the branch icon at the top left: + +make a branch + +Name your branch add-your-name. For example, add-crawleya + +Click on `Create new branch` + +name your branch + +## Make necessary changes and commit those changes + +Now open `Contributors.md` file in a text editor and add your name to it, then save the file. + +You can see that there are changes to Contributors.md and they have been added. + +check status + +Now commit those changes: + +Write the message "Add `` to Contributors list" in the *summary* field + +Replace `` with your name + +Click on the button that says `Commit to add-your-name` + +commit your changes + +At the bottom, you can see that the commit has been created. + +commit your changes + +## Push changes to github + +Click the `Publish` button on the top right. + +push your changes + +## Submit your changes for review + +If you go to your repository on github, you'll see `Compare & pull request` button. click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You could join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_senarios/additional-material.md) + + +## Tutorials Using Other Tools + +|Command Line|Visual Studio 2017|GitKraken| +|---|---|---| +|[Command Line](README.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)| + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com diff --git a/github-desktop-tutorial.md b/github-desktop-tutorial.md new file mode 100644 index 00000000000..e84afdd6cdc --- /dev/null +++ b/github-desktop-tutorial.md @@ -0,0 +1,133 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +|GitHub Desktop|GitHub Desktop Edition| +|---|---| + +It's hard. It's always hard the first time you do something. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are the better you learn. If you are looking for making your first contribution just follow the simple steps below. We promise you, it will be fun. + +If you don't have GitHub Desktop on your machine, [install it](https://desktop.github.com/). + +If you're using a version of GitHub desktop before 1.0, [refer this tutorial](github-desktop-old-version-tutorial.md). + +fork this repository + +## Fork this repository + +Fork this repo by clicking on the fork button on the top right of this page. +This will create of copy of this repository in your account. + +## Clone the repository + +Now clone this repo to your machine. + +IMPORTANT: DO NOT CLONE THE ORIGINAL REPO. Go to your fork and clone it. + +To clone the repo, click on "Clone or Download" and then click on "Open in Desktop". + +clone this repository + +A pop up window will open. Click on "Open GitHubDesktop.exe". + +clone this repository + +After you click on "Open GitHubDesktop.exe" the contents will be downloaded to your computer. + +clone this repository + +Now you have copied the contents of the first-contributions repository in github to your computer. + +## Create a branch + +Now create a branch by clicking on the "Current branch" icon at the top and then click on "New branch": + +make a branch + +Name your branch . For example, "add-james-smith" + +name your branch + +Click on `Create branch` + +## Make necessary changes and commit those changes + +Now open `Contributors.md` file in a text editor, scroll to the bottom of the page and add your name to it, then save the file. + +Example: If your name is James Smith, It should look like this. + +\[James Smith](https://github.com/jamessmith) + +You can see that there are changes to Contributors.md and they have been added to the Github Desktop. + +check status + +Now commit those changes: + +Write the message "Add `` to Contributors list" in the *summary* field. + +Replace `` with your name. + +Click on the button that says `Commit to add-your-name`. + +commit your changes + +At the bottom, you can see that the commit has been created. + +commit your changes + +## Push changes to github + +Click on File->Options and sign-in to Github.com. Type in your Github username and password. + +log-in to Github + +Click the `Publish` button on the top right. + +push your changes + +## Submit your changes for review + +If you go to your repository on github, you'll see `Compare & pull request` button. click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You can join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_senarios/additional-material.md) + + +## Tutorials Using Other Tools + +|Command Line|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[Command Line](README.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com diff --git a/github-windows-intellij-tutorial.md b/github-windows-intellij-tutorial.md new file mode 100644 index 00000000000..c56992cd98e --- /dev/null +++ b/github-windows-intellij-tutorial.md @@ -0,0 +1,122 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# First Contributions + +| IntelliJ IDEA | IntelliJ IDEA | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | + + +It's hard. It's always hard the first time you do something. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are, the better you learn. If you are looking for making your first contribution, just follow the simple steps below. We promise you, it will be fun. + +If you don't have IntelliJ IDEA on your machine, [install it](https://www.jetbrains.com/idea/download/#section=windows). + +**Notice:** This tutorial was made using IntelliJ IDEA (Version 2019.3.2) on a Windows 10 machine. Later in this tutorial we will make use of some keyboard shortcuts. These may differ on other operating systems (macOS/Linux). + +## Fork this repository + +fork this repository + +Fork this repo by clicking on the fork button on the top right of this page. This will create a copy of this repository in your GitHub account. + +GitHub keeps track of the relationship between your repo and the one you have forked it from. You can think of your repo as a working copy. + +Most top-level GitHub Repos (i.e. ones not forked from any other repo) have a small core team of people who can directly commit changes. All other contributors must fork the repo and make changes in the fork, then create a Pull Request to request to merge back their changes into the top-level repo. If the top-level repo administrator approves the changes they will be merged, and you will gain instant fame and fortune! More on how to do that later. + +## Clone your repository + +clone this repository + +The next step is to clone your repo down to your machine so you can begin making changes. IntelliJ IDEA needs the URL of your repo, so click the "clone" button and then click the "copy to clipboard" icon. + +**CAREFUL:** One mistake that new contributors often make is to clone the repo you forked _from_ rather than cloning your repo. Check your browser's address bar and make sure you are cloning your repo. + +Now open up IntelliJ IDEA. + +IntelliJ IDEA allows you to check out (in Git terms clone) an existing repository and create a new project based on the data you've downloaded. + +From the main menu, choose VCS | Get from Version Control, or, if no project is currently opened, click Get from Version Control on the Welcome screen. + +In the Get from Version Control dialog, specify the URL of the remote repository you want to clone (you can click Test to make sure that connection to the remote can be established) or select one of the VCS hosting services on the left. If you are already logged in to the selected hosting service, completion will suggest the list of available repositories that you can clone. + +Click Clone. If you want to create an IntelliJ IDEA project based on the sources you have cloned, click Yes in the confirmation dialog. Git root mapping will be automatically set to the project root directory. + +If your project contains submodules, they will also be cloned and automatically registered as project roots. + +**Important**: Make sure it is the forked repository and not the original one, otherwise it won't work. + +## Create a branch + +In Git, branching is a powerful mechanism that allows you to diverge from the main development line, for example, when you need to work on a feature or freeze a certain state of a codebase for a release, and so on. + +In IntelliJ IDEA, all operations with branches are performed in the Git Branches popup. To invoke it, click the Git widget in the Status bar or press Ctrl+Shift+`. + +The name of the branch that is currently checked out is displayed in the Git widget in the Status bar. + +In the Branches popup, choose New Branch. + +In the dialog that opens, specify the branch name, and make sure the Checkout branch option is selected if you want to switch to that branch. + +The new branch will start from the current HEAD. If you want to start a branch from a previous commit instead of the current branch HEAD, select this commit in the Log tab of the Version Control tool window Alt+9 and choose New Branch from the context menu. + +## Make necessary changes + +Open `Contributors.md` and add your name anywhere in the file. This file contains GFM (GitHub Flavored Markdown) which is a proprietary flavor of the markdown syntax. + +Copy one of the other contributors' lines and modify it with your name to make sure you get the syntax right - it can be picky. + +## Commit & Push changes to GitHub + +Select the files you want to commit or an entire changelist in the Local Changes tab of the Version Control tool window Alt+9 and press Ctrl+K or click Commit Commit button on the toolbar. + +The Commit Changes dialog that opens lists all files that have been modified since the last commit, as well as all newly added unversioned files. + +Enter a meaningful commit message. + +You can click Commit Message history Commit Message history Ctrl+M to choose from the list of recent commit messages. + +You can also edit the commit message later before you've pushed the commit. + +Press Ctrl+Shift+K or choose VCS | Git | Push from the main menu. The Push Commits dialog opens showing all Git repositories (for multi-repository projects) and listing all commits made in the current branch in each repository since the last push. + +## Submit your changes for review + +At this point you have completed your change but it still only resides in your repo. This step will show you how to submit a request to the administrator of the top-level repo to merge your change. + +In your repo on GitHub you'll see the `Compare & pull request` button next to the new branch notification. Click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You have just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You can join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_scenarios/additional-material.md) + +## Tutorials Using Other Tools +[Back to main page](README.md) + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com diff --git a/github-windows-vs-code-tutorial.md b/github-windows-vs-code-tutorial.md new file mode 100644 index 00000000000..b450416a41e --- /dev/null +++ b/github-windows-vs-code-tutorial.md @@ -0,0 +1,132 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# First Contributions + +| Visual Studio Code | Visual Studio Code | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | + + +It's hard. It's always hard the first time you do something. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are, the better you learn. If you are looking for making your first contribution, just follow the simple steps below. We promise you, it will be fun. + +If you don't have Visual Studio Code on your machine, [install it](https://code.visualstudio.com/download). + +**Notice:** This tutorial was made using Visual Studio Code (Version 1.27.2) on a Windows 10 machine. Later in this tutorial we will make use of some keyboard shortcuts. These may differ on other operating systems (macOS/Linux). + +## Fork this repository + +fork this repository + +Fork this repo by clicking on the fork button on the top right of this page. This will create of copy of this repository in your GitHub account. + +GitHub keeps track of the relationship between your repo and the one you have forked it from. You can think of your repo as a working copy. + +Most top-level GitHub repos (i.e. ones not forked from any other repo) have a small core team of people who can directly commit changes. All other contributors must fork the repo and make changes in the fork, then create a Pull Request to ask for their changes to be merged back into the top-level repo. If the top-level repo administrator likes the changes they will be merged and you will gain instant fame and fortune! More on how to do that later. + +## Clone your repository + +clone this repository + +The next step is to clone your repo down to your machine so you can begin making changes. VS Code needs the URL of your repo, so click the "clone" button and then click the "copy to clipboard" icon. + +**CAREFUL:** One mistake that new contributors often make is to clone the repo you forked _from_ rather than cloning your repo. Check your browser's address bar and make sure you are cloning your repo. + +Now open up Visual Studio Code. The welcome page of VS Code will pop up. From there press `F1` to open up the bar shown below. Notice that there is already a `>` (greater than) sign in the text field. You can also get to the input prompt by pressing `CTRL-P` and then type the `>` character. + +Clone Popup (Command Popup) + +You may notice that there are already some obscure commands listed below. Those are my recently used commands. So just don't care about them. + +Clone repo + +Now type in `git clone`, only `git` or `clone` (it works like a search). +Select the Entry `Git: Clone` and press `Enter` + +Paste Repository URL in + +Paste the URL of your repository and press `Enter`. This will open up a File Explorer where you can then choose where the Git repository should be stored. + +**Important**: Make sure it is the forked repository and not the original one, otherwise it won't work. + +Status popup + +You should see a status popup on the bottom right of Visual Studio Code. After it has finished, you can open up the cloned repository (now a folder on your machine) using the buttons in the dialog. + +## Create a branch + +Open up the command palette again by pressing `F1`. Type in `branch` and select the `create branch` command from there. In the next step type in the name of your new branch, for example `add-david-kroell`. Press enter and the branch will be created. The branch is also already checked out. [What does checkout mean?](https://www.git-scm.com/docs/git-checkout) + +Branches Command Palette + +## Make necessary changes + +Open `Contributors.md` and add your name anywhere in the file. This file contains GFM (GitHub Flavored Markdown) which is a proprietary flavor of the markdown syntax. + +Copy one of the other contributors' lines and modify it with your name to make sure you get the syntax right - it can be picky. + +Add your name + +## Commit & Push changes to GitHub + +On the left side of VS Code is a menu with 5 icons displayed. Select the version control/Source Control icon. +(Shortcut : Ctrl + Shift + G) + +Commit changes + +The file explorer displays all files which were changed after the last commit. By hovering the files and clicking the `+` (plus) the files are staged. + +Stashed Files + +Type something in the line on top of the explorer and press the checkmark. The changes are now committed to your local copy. Now the changes have to be pushed back to GitHub. + +Stashed Files + +Use the three-dot icon to open up the menu where you select the `Publish Branch` option. This should open up a dialog to put your GitHub credentials in. + +Stashed Files + +## Submit your changes for review + +At this point you have completed your change but it still only resides in your repo. This step will show you how to submit a request to the administrator of the top-level repo to merge your change. + +In your repo on GitHub you'll see the `Compare & pull request` button next to the new branch notification. Click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You have just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You can join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_scenarios/additional-material.md) + +## Tutorials Using Other Tools + +|Command Line|GitHub Desktop|Visual Studio 2017|GitKraken|Sourcetree App| +|---|---|---|---|---| +|[Command Line](README.md)|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| + + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com diff --git a/github-windows-vs2017-tutorial.md b/github-windows-vs2017-tutorial.md new file mode 100644 index 00000000000..21c120550a8 --- /dev/null +++ b/github-windows-vs2017-tutorial.md @@ -0,0 +1,157 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# First Contributions + +|Visual Studio 2017|Visual Studio 2017 Edition| +|---|---| + +It's hard. It's always hard the first time you do something. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are the better you learn. If you are looking for making your first contribution just follow the simple steps below. We promise you, it will be fun. + +If you don't have Visual Studio 2017 on your machine, [install it](https://www.visualstudio.com/downloads/). + +## Fork this repository + +fork this repository + +Fork this repository by clicking on the fork button on the top of this page. This will create of copy of this repository in your GitHub account. + +GitHub keeps track of the relationship between your repo and the one you forked it from. You can think of your repo as a working copy. + +Most top-level GitHub repos (i.e. ones not forked from any other repo) have a small core team of people who can directly commit changes. All other contributors must fork the repo and make changes in the fork, then create a Pull Request to ask for their changes to be merged back into the top-level repo. If the top-level repo administrator likes the changes they will be merged and you will gain instant fame and fortune! More on how to do that later. + +## Clone your repository + +clone this repository + +The next step is to clone your repo down to your machine so you can begin making changes. Visual Studio needs the URL of your repo, so click the "clone" button and then click the "copy to clipboard" icon. + +**CAREFUL:** One mistake that new contributors often make is to clone the repo you forked *from* rather than cloning your repo. Check your browser's address bar and make sure you are cloning your repo. + +It is now time to jump in to Visual Studio 2017! You will be working in the Team Explorer tab for most of this tutorial. If it is not open by default, click `View > Team Explorer` to open it. + +Team Explorer + +Team Explorer has many views and there are navigation buttons located at the top to help you find the different areas. To clone a repo, you need to be on the Connect view, which should be the default. If you do not see the 'clone' button, click the green plug at the top. + +Click the `Clone` option under **Local Git Repositories** and paste the URL to your repo in the text box. This should be the URL you copied to your clipboard from GitHub previously. + +Click the `Clone` button to initiate the process. + +Clone repo + +When the process is complete you will be moved over to the Solution Explorer tab where you can see the contents of your repo. Yours will look different than the screenshot below because things change! + +Solution Explorer + +## Create a branch + +Click back to the Team Explorer tab and use the main navigation dropdown to open the Branches view. + +Branches view + +You should see the **first-contributions** repo and the default branch, which is called `master`. Right-click on `master` and choose `New Local Branch From...`. + +New branch + +Give your branch a name like `add-`, for example: `add-alonzo-church`. + +Leave the `Checkout branch` box checked and click the `Create Branch` button. + +Create branch + +You should see your new branch in the list. + +See new branch + +## Make necessary changes + +Open `Contributors.md` and add your name to the end of the list. This file contains GFM (GitHub Flavored Markdown) which is a proprietary flavor of the markdown syntax. + +Copy one of the other contributors' lines and modify it with your name to make sure you get the syntax right - it can be picky. + +Add your name + +## Commit & Push changes to GitHub + +Switch back to Team Explorer and navigate to the Changes view. + +Changes + +Enter the information you want to post with your commit and click `Save`. Visual Studio will remember it for future commits. + +Git user information + +**NOTE:** Visual Studio uses a hidden folder called `.vs` to store your personal settings and preferences. The contents of this folder **should not be saved in Git**. +If it has not been ignored already, you may need to tell Git to ignore this folder so it does not send it up to the repo. + +This folder has already been ignored in this repo, so you should not have to perform this step...it is just here for your reference for future projects. + +Ignore vs folder + +Now you should see a list of changed files and a textbox to type a commit comment. Comments should be in brief but thorough. There is nothing worse than reading through commit comments and seeing this: `"I updated some stuff"`. Take a few seconds to outline your commit. Your team will thank you later, and you might even thank yourself! + +Click `Commit All and Push` to perform a local commit and push your changes back up to your repo, all in one step. + +**NOTE:** Commit can be performed separately from Push. We do both here for convenience. Commit logs your changes locally but they will not be reflected in your GitHub repo until you Push. + +Commit and Push + +The first time you Push to GitHub, Visual Studio will ask for your GitHub credentials. They will be cached so you should not see this very often. + +Login + +After the Push operation completes, open your repo in GitHub and you should see a message indicating a recently pushed branch. + +You can view your changes by opening the `Branch: master` dropdown and selecting your new branch. Congratulations, you can share the branch URL with the world to show your progress! + +View pushed branch on GitHub + +## Submit your changes for review + +At this point you have completed your change but it still only resides in your repo. This step will show you how to submit a request to the administrator of the top-level repo to merge your change. + +In your repo on GitHub you'll see the `Compare & pull request` button next to the new branch notification. Click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You have just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You can join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutorials Using Other Tools + +|Command Line|GitHub Desktop|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[Command Line](README.md)|[GitHub Desktop](github-desktop-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| + + + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com + diff --git a/gitkraken-tutorial.md b/gitkraken-tutorial.md new file mode 100644 index 00000000000..e0c689f4454 --- /dev/null +++ b/gitkraken-tutorial.md @@ -0,0 +1,136 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +|GitKraken|GitKraken Edition| +|---|---| + +It's hard. It's always hard, when you do something for the first time. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are, the better you learn. If you are looking for making your first contribution just follow the simple steps below. We promise you, it will be fun. + + +## Git Kraken + +Download [GitKraken](https://www.gitkraken.com), Install and open it. + + +You should see the "Welcome to GitKraken" modal dialog - Sign in with GitHub and allow GitKraken access to your GitHub account. + + +login to GitHub + +(optional) Go to File -> Preferences and set your project directory to the root of your local repositories. + + +## Fork this repository + +Fork this repo by clicking on the fork button on the top of this page. +fork this repository +This will create of copy of this repository in your account. + + +## Clone the repository + +In GitKraken, go to File -> Clone Repo. + + +clone this repository + + +Select GitHub.com in the right pane. Under your username, you should see first-contributions. Click that repository and check the full path shown at the bottom of this pane. + +Once you're satisfied with the path, click "Clone the repo!". + + +## Create a branch + +Click the branch button on the toolbar. + +Name your branch "add-your-name", for example: "add-william-sutton" + +name your branch + + +## Make necessary changes and commit those changes + +Now open `Contributors.md` file in a text editor and add your name to it, then save the file. + +If you have the repo open in GitKraken you'll see there are changes. Review and stage those changes by selecting the newest commit marked with "// WIP" and the number of files changed and the type of change. + +edit some file(s) + +Review the files that have been changed and decide what you would like to stage. Staging is important to tell git exactly what file changes you want associated with this commit. + + +stage your changes + + +Once you have a good commit message ("Add to Contributors list" sounds nice and descriptive) and are happy with your changes, you can hit "Stage all changes" to stage everything that is modified or "Stage File" to stage an individual file. + + +clone this repository + + +If you change your mind, you can unstage those changes, or you can discard them all together. +WARNING: As the word discard implies, this is a destructive operation. Do this only if you don't want any change(s) from whatever repository you're in. + +Hit commit. + +Congratulations, you've committed all the changes to your local copy of your branch of your fork of first-contributions. Onward! + + +## Push changes to GitHub + +push your changes + +Click the Push button on the toolbar. + +origin or branch + +Submit changes on the origin branch if you want the changes to reflect in the master branch directly, else select the appropriate branch you want to push. + + +## Submit your changes for review + +If you go to your repository on github, you'll see `Compare & pull request` button. Click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You have just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You could join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_senarios/additional-material.md) + + +## Tutorials Using Other Tools + +|Command Line|GitHub Desktop|Visual Studio 2017|VS Code|Sourcetree App| +|---|---|---|---|---| +|[Command Line](README.md)|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000000..48e341a0954 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3 @@ +{ + "lockfileVersion": 1 +} diff --git a/sourcetree-macos-tutorial.md b/sourcetree-macos-tutorial.md new file mode 100644 index 00000000000..700c521e761 --- /dev/null +++ b/sourcetree-macos-tutorial.md @@ -0,0 +1,152 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +|SourceTree|Atlassian Sourcetree| +|---|---| + +It's hard. It's always hard, when you do something for the first time. Especially when you are collaborating, making mistakes isn't a comfortable thing. But open source is all about collaboration & working together. We wanted to simplify the way new open-source contributors learn & contribute for the first time. + +Reading articles & watching tutorials can help, but what comes better than actually doing the stuff without messing up anything. This project aims at providing guidance & simplifying the way rookies make their first contribution. Remember the more relaxed you are, the better you learn. If you are looking for making your first contribution just follow the simple steps below. We promise you, it will be fun. + + +## Sourcetree + +Please note, this tutorial is for MacOS. It is similar with Sourcetree on Windows but some things may look different. + + +Download [Sourcetree](https://www.sourcetreeapp.com), Install and open it. + +You should see the "Sourcetree" modal dialog. + +SourceTree Main + +From here, you want to click on Remote. If this is the first installation, then you likely haven't connected your GitHub account yet. Do so by clicking the "Connect Button". + +SourceTree Connect + +The *Accounts* dialog will appear. Click "Add" in the lower left hand corner. Then select the appropriate settings to add GitHub (or any other account you want) to the client. After you selected your settings for GitHub, click "Connect Account." + +SourceTree Connect Add + +This will open a page in your web browswer. Follow the steps given to authorize your account. + +## Fork this repository + +Fork this repo by clicking on the fork button on the top of this page. +fork this repository +This will create of copy of this repository in your account. + + +## Clone the repository + +In Sourcetree, Click on the "Remote" button. This should load all of your GitHub repos which are listed on GitHub. + +clone this repository + +Once you click the "Clone" button, you will be presented with another view to define several different things. + +clone this repository + +1) **Source URL:** This is automatically filled and you dont need to change it. It is the URL from where your GitHub project resides. + +2) **Destination Path:** This is the physical location on your computer where this project will be saved + +3) **Name:** This is a "Bookmark" to how Sourcetree will reference your project. Think of it like a shortcut. + +*Note: Normally the defaults in these fields are fine.* + +**Once you are satisfied, click "Clone"** + +This will bring up the main repo browser for your repository! + +## Create a branch + +Click the branch button on the toolbar. + +Name your branch "add-your-name-to-contribution", for example: "add-sally-to-contribution". + +To do this, click **Branch (1)** which launches the naming dialog. Then **Add your name (2)** as just described. Finally click **Create Branch**. This will create the branch for what you just named. + +name your branch + + +## Make necessary changes and commit those changes + +Now open `Contributors.md` file in a text editor and add your name to it, with your Github URL link, then save the file. + +You should be able to see and review the file that have been changed and decide what you would like to stage. Staging is important to tell git exactly what file changes you want associated with this commit. + +*Note: If you do not see the file's diff, click **Uncommitted Files** at the top of your dialog* + +edit some file(s) + +Next click the **Commit** button on the top left of the dialog. This will show you your staging area. + +Click the *Checkbox* to **add** the file to the stagging area. Then enter a commit message. + +*Note: You can also select files (both in the stagging and unstaged areas) and add/remove files from the respective areas by using the spacebar* + +stage your changes + + +Once you have added your changes and added a commit message, you can press the **Commit** button to finally make the commit. + +Congratulations, you've committed all the changes to your local copy of your branch of your fork of first-contributions. Onward! + + +## Push changes to GitHub + +Now you are ready to push your changes to github. This will be pushing it to your own, forked, copy of the project. Follow the steps to push your branch up. First, click **Push (1)**, this will show the remote/push dialog. **Click (2)** the checkbox of your branch you want to push. Select **OK (3)** and this will push your commit up to Github. + +origin or branch + +## Submit your changes for review + +If you go to your repository on github, you'll see `Compare & pull request` button. Click on that button. + +create a pull request + +Now submit the pull request. + +submit pull request + +Soon I'll be merging all your changes into the master branch of this project. You will get a notification email once the changes have been merged. + +## Where to go from here? + +Congrats! You have just completed the standard _fork -> clone -> edit -> PR_ workflow that you'll encounter often as a contributor! + +Celebrate your contribution and share it with your friends and followers by going to [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +You could join our slack team in case you need any help or have any questions. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](additional-material/git_workflow_senarios/additional-material.md) + + +## Tutorials Using Other Tools + +|Command Line|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---|---| +|[Command Line](README.md)|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + +## Self-Promotion + +If you liked this project, star it on [GitHub](https://github.com/Roshanjossey/first-contributions). +If you're feeling especially charitable, follow [Roshan](https://roshanjossey.github.io/) on +[Twitter](https://twitter.com/sudo__bangbang) and +[GitHub](https://github.com/roshanjossey). + + http://saasgrids.com diff --git a/translations/README.afk.md b/translations/README.afk.md new file mode 100644 index 00000000000..ad3ded94715 --- /dev/null +++ b/translations/README.afk.md @@ -0,0 +1,177 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Eerste Bydraes + +Dit is moeilik. Dit is altyd moeilik om die eerste keer iets te doen. Veral wanneer jy saamwerk, maak foute nie 'n gemaklike ding nie. Ons wou die manier waarop nuwe open source bydraers vir die eerste keer leer en bydra, vereenvoudig. + +Lees artikels en kyk tutoriale kan help, maar wat is beter as om die goed in die praktyk te doen? Hierdie projek het ten doel om leiding te gee en die manier waarop beginners hul eerste bydrae maak, te vereenvoudig. As jy jou eerste bydrae wil maak, volg die onderstaande stappe. + +#### *As jy nie gemaklik is met die opdraglyn nie, [is daar tutoriale wat GUI-instrumente gebruik.]( #tutorials-using-other-tools )* + +#### *Lees dit in [ander tale .](translations/Translations.md).* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) + + + +fork this repository + +As jy nie git op jou masjien het nie, [installeer dit]( https://help.github.com/articles/set-up-git/). + +## Vork hierdie bewaarplek + +Vork hierdie repo deur op die vurk knoppie bo-aan hierdie bladsy te klik. Dit sal 'n kopie van hierdie repository in u rekening skep. + +## Klone die repository + +clone this repository + +Klone nou die vurk repo aan jou masjien. Gaan na jou GitHub-rekening, maak die vurk repo oop, klik op die kloonknop en klik dan op die kopie na die knipbord- ikoon. + +Open 'n terminaal en voer die volgende git opdrag uit: + +``` +git clone "url you just copied" +``` + +waar "url jy net gekopieer" het (sonder die aanhalingstekens) is die url na hierdie repository (jou vurk van hierdie projek). Sien die vorige stappe om die url te verkry. + +copy URL to clipboard + +Byvoorbeeld: + +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +waar `this-is-youis` jou GitHub gebruikersnaam Hier kopieer jy die inhoud van die eerste bydrae repository in GitHub na jou rekenaar. + +## Skep 'n tak + +Verander na die repository gids op jou rekenaar (as jy nie reeds daar is nie): + +``` +cd first-contributions +``` + +Skep nou 'n tak met die git `checkout` opdrag: + +``` +git checkout -b +``` + +Byvoorbeeld: + +``` +git checkout -b add-alonzo-church +``` + +(Die naam van die tak hoef nie die woord by te voeg nie, maar dit is 'n redelike ding om in te sluit omdat die doel van hierdie tak is om jou naam by 'n lys te voeg.) + +## Maak die nodige veranderinge en verbind die veranderinge + +Nou oop `Contributors.md` lêer in 'n teksredigeerder, voeg jou naam daarby. Moet dit nie aan die begin of einde van die lêer byvoeg nie. Sit dit oral tussenin. Stoor nou die lêer. + +git status + +As u na die projekgids gaan en die opdrag uitvoer `git status`, sal u sien dat daar veranderinge is. + + +Voeg die veranderinge by die tak wat jy net geskep het deur die `git add` opdrag te gebruik: + +``` +git add Contributors.md +``` + +Doen nou die veranderinge deur die `git commit` opdrag te gebruik: + +``` +git commit -m "Add to Contributors list" +``` + +vervang `` met jou naam. + +## Druk veranderinge na GitHub + +Druk jou veranderinge deur die opdrag te gebruik `git push`: + +``` +git push origin +``` + +vervang `` met die naam van die tak wat jy vroeër geskep het. + +## Dien jou veranderinge in vir hersiening + +As jy na jou repository op GitHub gaan, sal jy 'n `Compare & pull` requestknoppie sien. Klik op daardie knoppie. + +create a pull request + +Dien nou die trekversoek in. + +submit pull request + +Binnekort sal ek al jou veranderinge in die meestertak van hierdie projek saamsmelt. U sal 'n kennisgewing-e-pos ontvang sodra die veranderinge saamgesmelt is. + +## Waarheen gaan jy vandaan? + +Geluk! Jy het net die standaardvurk voltooi -> klone -> wysig -> PR- werkvloei wat jy dikwels as 'n bydraer sal ervaar! + +Vier jou bydrae en deel dit met jou vriende en volgelinge deur na die [webprogram te](https://roshanjossey.github.io/first-contributions/#social-share) gaan . + +U kan by ons span aansluit indien u enige hulp nodig het of enige vrae het. [Sluit aan by 'n slapende span](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Kom ons begin met die bydrae tot ander projekte. Ons het 'n lys van projekte saamgestel met maklike probleme waarmee u kan begin. Kyk na [die lys van projekte in die web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Bykomende materiaal](additional-material/git_workflow_scenarios/additional-material.md) + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visuele Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visuele Studio Kode](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.ar.md b/translations/README.ar.md new file mode 100644 index 00000000000..1ea0ab15a78 --- /dev/null +++ b/translations/README.ar.md @@ -0,0 +1,183 @@ + + +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +#
مساهمتك الأولى
+ +
+الصعوبة متوقعة عندما تبدأ بأي عمل جديد، خصوصاً إذا كان العمل يتضمن أشخاص آخرون، مما يجعل الوقوع في الخطأ مزعجا. +
+لكن المساهمة في مشاريع مفتوحة المصدر يتطلب ويتوقع الخطأ ولهذا السبب الآخرون سيساعدونك في تصحيح هذا الخطأ. +
+في هذا المشروع هدفنا هو تسهيل الطريق لمساهمتك الأولى. +
+ + +
+قراءة ومشاهدة التعليمات المتوفرة على الإنترنت ستساعدك حتماً، لكنك ستستفيد أكثر إذا استطعت المساهمة في مشروع دون الخوف من الوقوع في الخطأ. هذا المشروع يركز على توفير التوجيهات والتعليمات البدائية لإتمام أول مساهمة لك. +تذكر أن الخطأ متوقع والهدف أن تتجاوز الخطأ في هذه البيئة، نريد منك أن تكون مسترخيا ومتابعا الخطوات المتوفرة لإتمام مشاركتك الأولى. نعدك ستستمع بذلك. +
+ + +
+إذا لم يكن لديك git على الجهاز الخاص بك،قم بتثبيته من هنا +
+ +##
افرق هذا المشروع - Fork this Repository
+fork this repository +
+افرق هذا المشروع بالضغط على زر Fork في أعلى هذه الصفحة. +من خلال ذلك ستنشأ نسخة من هذا المشروع على حسابك الخاص. +
+ +##
استنسخ هذا المشروع - Clone the repository
+ +clone this repository + +
+استنسخ هذا المشروع على جهازك. +انقر على زر Clone ثم انقر على أيقونة Copy to clipboard +
+copy URL to clipboard +
+افتح الطرفية واكتب الأمر التالي: +
+ +``` +git clone "url you just copied" +``` + +
قم باستبدال "url you just copied" بالرابط الذي نسخته من الخطوة السابقة، هذا الرابط يحتوي على المشروع.
+ +
على سبيل المثال:
+ +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +
+في هذا المثال لاحظ 'this-is-you' سيكون اسم حسابك في موقع github يليه رابط المشروع الذي فرقته في أول خطوة، هذا الأمر سينسخ محتويات المشروع على جهازك لتتمكن من التعديل عليه بحرية. +
+
+ +##
إنشاء فرع - Create a branch
+ + +
انتقل إلى المجلد الذي يحتوي على المشروع عن طريق الأمر التالي:
+ +``` +cd first-contributions +``` + +
الآن قم بإنشاء فرع عن طريق الأمر التالي:
+ +``` +git checkout -b "add-your-name" +``` + +
اسمك بدل add-your-name
+ +
على سبيل المثال:
+ +``` +git checkout -b "add-alonzo-church" +``` + +
+ +##
قم بإجراء التعديلات المطلوبة وأتممها
+ +
+الآن قم بفتح الملف "Contributors.md" في محرر النصوص المفضل لديك وأضف اسمك ثم احفظ الملف. +بعد ذلك اذهب إلى الطرفية واكتب الأمر هذاgit status هذا الأمر سيظهر لك التغيرات التي حدثت في المشروع. +لإضافة هذه التغييرات قم بإضافتها عن طريق هذا الأمر git add. +
+ +``` +git add Contributors.md +``` + +
الآن قم بإتمام التغييرات باستخدام الأمر git commit.
+ +``` +git commit -m "Add to Contributors list" +``` + +
استبدل <your-name> باسمك.
+
+ +##
ارفع التغييرات إلى github - Push changes to Github
+ +
ارفع التغيررات عن طريق الأمر git push
+ +``` +git push origin "add-your-name" +``` + +
استبدل <add-your-name> باسم الفرع الذي أنشأته من قبل.
+ + +
+

سلم تغيراتك للمراجعة

+ + +
في صفحة المشروع الخاصة بك يوجد زر Compare & pull request. اضغط على هذا الزر.
+ +create a pull request + +
والآن سلم طلبك لتتم مراجعته
+ +submit pull request + +
بعد المراجعة سوف أقوم بدمج تغيرراتك إلى الفرع الرئيس في المشروع. سيتم تنبيهك عن طريق البريد الإلكتروني بذلك.
+ +
الفرع الرئيس الخاص بك لن يحتوي على هذه التغيررات. عليك مزامنته مع الفرع الرئيس عن طريق الخطوات التالية.
+ +##
مزامنة نسختك مع المشروع الرئيسي
+ +
الخطوة الأولى، انتقل إلى الفرع الرئيس.
+ +``` +git checkout master +``` + +
ثانياً، أضف رابط مشروعي كـupstream remote url.
+ +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` + +
بهذه الطريقة نخبر git أن هناك نسخة أخرى من هذا المشروع في هذا الرابط ونسميها upstream. +بعد أن أوافق على تغيرراتك، قم بسحب النسخة الجديدة من المشروع عن طريق الأمر التالي: +
+ +``` +git fetch upstream +``` + +
هنا سنقوم بسحب جميع التغييرات من (upstream remote). والآن، عليك أن تدمج التحديثات الجديدة من فرعي إلى فرعك الرئيس.
+ +``` +git rebase upstream/master +``` + +
وهنا تطبق التغييرات إلى الفرع الرئيس. إذا رفعت التغييرات لفرعك الرئيس سيتم تحديث مشروعك
+ +``` +git push origin master +``` + +
لاحظ أنك ترفع إلى remote اسمه origin.
+
+ +##
توجيهات بإستخدام أدوات أخرى
+ +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + + diff --git a/translations/README.bg.md b/translations/README.bg.md new file mode 100644 index 00000000000..6773e51cb2c --- /dev/null +++ b/translations/README.bg.md @@ -0,0 +1,168 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Първи стъпки + +Трудно е. Когато правиш нещо за пръв път винаги е трудно. Още повече, когато се работи съвместно с други хора. Затова решихме да опростим процеса на учене за новобранците в допринасянето към отворен софтуеър. + +Четенето на статии и гледането на видео уроци помага, но има ли по-добър учител от практиката в защитена среда? Целта на този проект е да напътства и опрости първите стъпки на новобранците в участието и приноса към отворен софтуеър. Ако искате да направите първата си контрибуция и да станете част от обществото на отворен софтуеър, следвайте стъпките по-долу. + +#### *Ако не се чувствате комфортно използвайки command line (терминал), [ето и уроци за използването на програми с графичен интерфейс]( #tutorials-using-other-tools )* + +#### *Можете да прочетете тази статия и на [други езици](translations/Translations.md).* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) + + + +fork this repository + +Ако нямате git на вашия компютър, [инсталирайте го]( https://help.github.com/articles/set-up-git/). + +## Направете Разклонение (Fork) на това хранилище (repository) + +Направете разклонение на хранилището като натиснете бутона "Fork" в горната част на тази страница. +Това ще направи копие на това хранилище във вашия GitHub профил. + +## Клонирайте това хранилище + +clone this repository + +Сега клонирайте локално на вашия компютър разклоненото хранилище. Отидете във вашия GitHub профил, отворете разклоненото хранилище, +кликнете на бутона 'Clone' и копирайте линка или натиснете иконката 'copy to clipboard' (копирай в клипборда). + +Отворете терминал и въведете следната команда + +``` +git clone "линка който току-що копирахте" +``` +като на мястото на "URL-а който току-що копирахте" (без кавичките) поставете линка към това хранилище (Вашето Разклонение на този проект). Вижте +предните стъпки за това как да се сдобиете с линка. +copy URL to clipboard + +Например: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +Като на мястото на `this-is-you` се намира вашето потребителско име. В тази стъпка вие направихте копие на съдържанието на GitHub хванилището на 'first contributions' във вашия компютър. + +## Създайте клон (branch) + +Стигнете до местоположението във вашия компютър, където копирахте хранилището (ако вече не се намирате там): + +``` +cd first-contributions +``` +Сега създайте клон използвайки командата `git checkout`: +``` +git checkout -b +``` + +Например: +``` +git checkout -b add-alonzo-church +``` +(Името на клона не е задължително да съдържа думата *add*, но е препоръчително, защото целта на този клон е да добавите името си към списък.) + +## Направете нужните промени и ги commit-нете + +Сега отворете файла `Contributors.md` в текстов редактор и добавете името си вн его. Не го добавяйте в началото или края на файла. Поставете го някъде посредата. Сега запазете промените. + +git status + + +Ако навигирате през терминала до директорията на проекта и въведете командата `git status`, ще видите че има променени файлове. + + +ДОбавете тези промени към клона, който създадохте, използвайки командата `git add`: + +``` +git add Contributors.md +``` + +Сега commit-нете тези промени с командата `git commit`: +``` +git commit -m "Add to Contributors list" +``` +като смените `` с вашето име. + +## Качете (Push) промените в GitHub + +Качете вашите промени като въведете командата `git push`: +``` +git push origin +``` +сменяйки `` с името на клона, който създадохте по-рано. + +## Предайте вашите промени за рецензия + +Ако отидете във вашето хранилище в GitHub, ще видите бутона `Compare & pull request`. Натиснете го. + +create a pull request + +Сега предайте вашите промени за рецензия. + +submit pull request + +Скоро аз ще слея (merge) всички ваши промени в главния клон (мастер branch) на този проект. Вие ще бъдете уведомени по електронната поща когато това се случи. + +## От тук накъде? + +Поздравления! Вие току що изпълнихте стандарните _fork -> clone -> edit -> PR_ операции, които ще срещнете като сътрудник! + +Отпразнувайте вашия принос и го споделете с приятели и последователи като посетите [уеб приложението](https://roshanjossey.github.io/first-contributions/#social-share). + +Можете да се присъедините към нашия slack team в случай, че имате допълнителни въпроси или нужда от помощ [Присъединете се към slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Време да започнете да допринасяте и към други приекти. Ние сме съставили списък с проекти съдържащи лесни проблеми, които са лесни за начало. Проверете [списъка от приекти в уеб приложението](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Допълнителни материали](additional-material/git_workflow_scenarios/additional-material.md) + + +## Уроци за иползването на други приложения + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.bn.md b/translations/README.bn.md new file mode 100644 index 00000000000..2a41f114001 --- /dev/null +++ b/translations/README.bn.md @@ -0,0 +1,117 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# প্রথম অবদান + +প্রথমবারের মত কোন কাজ করতে গেলে তা কঠিন বলেই মনে হবে। আর আপনি যদি অন্যদের কাজে সহযোগিতা করেন, তাহলে ভুলভ্রান্তিগুলো অত্যন্ত বিব্রতকর। অথচ 'ওপেন সোর্স'-এর মূল বিষয়টিই হচ্ছে পারস্পরিক সহযোগিতা ও একত্রে কাজ করা। আমরা চাই ওপেন সোর্সে অবদান রাখতে ইচ্ছুক নবীনরা যেন সহজেই শিখতে পারে এবং প্রথমবারের মত তাদের অবদান রাখতে পারে। + +প্রবন্ধ পড়ে এবং টিউটোরিয়াল দেখে অনেক কিছুই শেখা যায়, কিন্তু ব্যবহারিক পদ্ধতিতে কাজ করার চেয়ে ভালো কিছু হতে পারে না। এই প্রজেক্টের লক্ষ্য হচ্ছে নবীনদের দিকনির্দেশনা দেওয়া আর সেই সাথে তাদের প্রথম অবদান রাখার কাজটি সহজ করে তোলা। আপনি যদি ওপেন সোর্সে আপনার প্রথম অবদান রাখতে চান, তাহলে নিচের সহজ ধাপগুলো অনুসরণ করুন। কথা দিচ্ছি, এই প্রক্রিয়াটি অত্যন্ত মজার ও আনন্দদায়ক। + +#### *কমান্ড লাইন ইন্টারফেস এ স্বাচ্ছন্দ্য বোধ না করলে, [এখান থেকে গ্রাফিকাল ইন্টারফেস দিয়ে কিভাবে কাজ টি করতে হয় তার টিউটোরিয়াল দেখুন।]( #অন্যান্য-টুল-ব্যবহারের-টিউটোরিয়াল )* + +#### *এই লেখাটি [অন্য ভাষায় পড়ুন।](translations/Translations.md)* + +fork this repository + +আপনার কম্পিউটারে গিট না থাকলে, [ ইনস্টল করুন ]( https://help.github.com/articles/set-up-git/ )। + +## এই রিপোজিটরি ফর্ক করুন + +এই পৃষ্ঠার উপরের অংশে ফর্ক (fork) বাটনে ক্লিক করে এই রিপোজিটরি ফর্ক করুন। +এই প্রক্রিয়ায় আপনার অ্যাকাউন্টে এই রিপোজিটরির একটি কপি তৈরি হবে। + +## রিপোজিটরি ক্লোন করুন + + +clone this repository + +এখন এই রিপোটি আপনার কম্পিউটারে ক্লোন করুন। এজন্যে প্রথমে ক্লোন(Clone) বাটনে ক্লিক করুন। এরপর ক্লিক করুন *ক্লিপবোর্ডে কপি করুন(copy to clipboard)* আইকনটিতে। + +টার্মিনাল চালু করুন এবং নিচের কমান্ড রান করুন: + +``` +git clone "url you just copied" +``` +যেখানে "url you just copied" (উদ্ধৃত চিহ্ণ ব্যতীত) হচ্ছে এই রিপোজিটরির ইউআরএল যা আপনি পূর্বের ধাপেই পেয়েছেন। + +copy URL to clipboard + +উদাহরণ: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +এখানে `this-is-you` হচ্ছে আপনার গিটহাব ইউজারনেম। এই কমান্ডটির মাধ্যমে গিটহাবে অবস্থিত first-contributions রিপোজিটরির একটি কপি তৈরি হচ্ছে আপনার কম্পিউটারে। + +## একটি ব্রাঞ্চ তৈরি করুন + +আপনার কম্পিউটারে রিপোজিটরির ডিরেক্টরিতে যান (যদি এখনো অন্য ডিরেক্টরিতে থাকেন): + +``` +cd first-contributions +``` +এখন `git checkout` কমান্ডের মাধ্যমে একটি ব্রাঞ্চ তৈরি করুন: +``` +git checkout -b +``` + +উদাহরণ: +``` +git checkout -b add-alonzo-church +``` +(ব্রাঞ্চের নামে *add* শব্দটি যুক্ত থাকা জরুরী নয়। তবে এই ব্রাঞ্চের উদ্দেশ্য যেহেতু আপনার নাম তালিকাভুক্ত করা, সেহেতু *add* শব্দটি যুক্ত থাকাই কাম্য।) + +## প্রয়োজনীয় পরিবর্তন করুন ও পরিবর্তনগুলো কমিট করুন + +এখন যে কোন টেক্সট এডিটরে `Contributors.md` ফাইলটি খুলুন, এতে আপনার নাম যুক্ত করুন, অতঃপর ফাইলটি সেভ করুন। এবার প্রজেক্ট ডিরেক্টরি থেকে `git status` কমান্ড রান করলে আপনি পরিবর্তনগুলো দেখতে পাবেন। `git add` কমান্ড দ্বারা এই পরিবর্তনগুলো আপনার তৈরি ব্রাঞ্চে যুক্ত করুন: +``` +git add Contributors.md +``` + +এরপর `git commit` কমান্ড ব্যবহার করে এই পরিবর্তনগুলো কমিট করুন: +``` +git commit -m "Add to Contributors list" +``` +``-এর বদলে আপনার নাম লিখতে ভুলবেন না। + +## পরিবর্তনগুলো গিটহাবে পুশ করা + +`git push` কমান্ড ব্যবহার করে পরিবর্তনগুলো পুশ করুন: +``` +git push origin +``` +এক্ষেত্রে ``-এর বদলে পূর্বে আপনার তৈরি ব্রাঞ্চের নাম লিখুন। + +## রিভিউয়ের জন্য আপনার পরিবর্তনগুলো জমা দিন + +আপনার গিটহাব রিপোজিটরিতে `Compare & pull request` বাটনে ক্লিক করুন। + +create a pull request + +এখন *পুল রিকোয়েস্ট* সাবমিট করুন। + +submit pull request + +আমি যথা শীঘ্র সম্ভব আপনার পরিবর্তনগুলো এই প্রজেক্টের মাস্টার ব্রাঞ্চে মার্জ করব। মার্জ করা সম্পন্ন হলে আপনি একটি নিশ্চিতকরণ ই-মেইল পাবেন। + +## এরপর কী করব? + +আপনার অবদানের আনন্দ উপভোগ করুন এবং [ওয়েব অ্যাপ](https://roshanjossey.github.io/first-contributions/#social-share)-এর মাধ্যমে বন্ধু ও অনুসরণকারীদের সাথে শেয়ার করুন। + +কোন সহায়তার প্রয়োজন হলে বা আপনার কোন প্রশ্ন থাকলে আপনি আমাদের স্ল্যাক টিমে যুক্ত হতে পারেন। [স্ল্যাক টিমে যোগ দিন](https://firstcontributions.herokuapp.com) + +এখন আপনি অন্যান্য প্রজেক্টগুলোতেও অবদান রাখতে পারেন। আপনার সুবিধার্থে আমরা সহজ সমস্যা সম্বলিত প্রজেক্টগুলোর একটি তালিকা তৈরি করেছি। ওয়েব অ্যাপে [প্রজেক্টগুলোর তালিকা](https://roshanjossey.github.io/first-contributions/#project-list) দেখুন। + +### [ অতিরিক্ত উপাদানসমূহ ](../additional-material/git_workflow_senarios/additional-material.md) + + +## অন্যান্য টুল ব্যবহারের টিউটোরিয়াল + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[গিটহাব ডেস্কটপ](../github-desktop-tutorial.md)|[ভিজুয়াল স্টুডিও ২০১৭](../github-windows-vs2017-tutorial.md)|[গিটক্র্যাকেন](../gitkraken-tutorial.md)| + + + diff --git a/translations/README.ca.md b/translations/README.ca.md new file mode 100644 index 00000000000..9ec5523be6d --- /dev/null +++ b/translations/README.ca.md @@ -0,0 +1,124 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Primeres Contribucions + +És difícil. Sempre ho és quan es fa algo per primera vegada. Especialment quan es col·labora amb altres, ja que efectuar errades no es gens agradable. Es vol simplificar la manera en que els col·laboradors de codi obert aprenen i contribueixen per primera vegada. + +Llegir articles i mirar tutorials pot ser d'ajuda, però què millor que fer les coses en un entorn de pràctiques? Aquest projecte és una guia, simplificant la forma de fer la primera contribució per als principiants. Si voleu fer la primera contribució, seguiu les instruccions que es mostren a continuació: + +#### *Si no esteu còmode amb la línia d'ordres, [aquí hi ha tutorials utilitzant eines amb Interfaç Gràfica (GUI)]( #tutorials-using-other-tools )* + +fer fork d'aquest repsoitori + +Si no disposeu de git en el vostre ordinador, [instal·leu-lo]( https://help.github.com/articles/set-up-git/). + +## Bifurca (*Fork*) aquest respositori + +Feu un *fork* d'aquest repositori clicant al botó "*Fork*" a la part superior dreta d'aquesta pàgina. +Això crearà una còpia d'aquest repositori en el seu compte. + +## Clona (*Clone*) el repositori + +clonar aquest repositori + +Cloneu aquest repositori al vostre ordinador. Adreceu-vos al vostre compte de GitHub, cliqueu al botó clonar "*clone or download*" i després cliqueu a la icona de *copiar al porta-retalls*. + +Obriu una terminal i executeu la següent comanda de git: + +``` +git clone "url que acabeu de copiar" +``` +on "url que acabeu de copiar" (sense cometes dobles) és la *url* per a aquest respositori (el vostre *fork* d'aquest projecte). Veure els passos anteriors per a obtenir la *url*. + +copiar URL al porta-retalls + +Per exemple: +``` +git clone https://github.com/aquest-soc-jo/first-contributions.git +``` +on `aquest-soc-jo` és el vostre nom d'usuari de GitHub. Aquí esteu copiant el contingut del repository *first-contributions* de GitHub al vostre ordinador. + +## Crea una branca (*branch*) + +Canvieu al directori del repositori del vostre ordinador (si no hi esteu allà ja): + +``` +cd first-contributions +``` +Creeu una nova branca (*branch*) utilitzant la comanda `git checkout`: +``` +git checkout -b +``` + +Per exemple: +``` +git checkout -b add-nom-cognom +``` +(No és necessari que el nom de la branca contingui la paraula *add*, però es recomanable ja que el propòsit d'aquesta branca és afegir el seu nom a la llista.) + +## Fer els canvis necessaris i confirmar (*commit*) els canvis + +Obriu l'arxiu `Contributors.md` en un editor de text i afegeiu el vostre nom. No l'afegiu ni al principi ni al final de l'arxiu. Poseu-lo en qualsevol altre posició. Guardeu l'arxiu. + +git status + + +Si aneu al directori del projecte i executeu la comanda `git status`, veureu els canvis. + + +Afegiu aquests canvis a la branca que acabeu de crear utilitzant la comanda `git add`: + +``` +git add Contributors.md +``` + +Confirmeu (*commit*) els canvis utilitzant la comanda `git init`: +``` +git commit -m "Add to Contributors list" +``` +reemplaçant `` amb el vostre nom. + +## Envia (*Push*) els canvis a GitHub + +Feu un *Push* dels canvis utilitzant la comanda `git push`: +``` +git push origin +``` +reemplaçant `` amb el nom de la branca que heu creat anteriorment. + +## Envía (*Submit*) els canvis per a ser revisats + +Si aneu al vostre respositori a GitHub, veureu un botó `Compare & pull request`. Cliqueu sobre aquest botó. + +crear una pull request + +Envía la *pull request*. + +envia la pull request + +Aviat estaré fusionant els vostres canvis en la branca (*branch*) master d'aquest projecte. Rebreu una notificació per correu electrònic un cop els canvis hagin sigut fusionats. + +## On anar des d'aquí? + +Enhorabona! Acabeu de completar l'estàndard flux de treball *_fork -> clone -> edit -> PR_* que trobareu sovint com a col·laborador! + +Celebreu la vostra contribució i compartiu-ho amb els vostres amics i seguidors anant a [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Podeu unir-vos al nostre equip d'*slack* en cas de que necessiteu ajuda o tingueu alguna pregunta. [Unir-se a l'equip d'slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Ara anem a preparar-nos per a contribuir a altres projectes. Hem reunit una llista de projectes amb îssues* facils per a que pugueu començar. Doneu un cop d'ull [la llista de projectes en la web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Material adicional](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutorials amb Altres Eines + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + + diff --git a/translations/README.chs.md b/translations/README.chs.md new file mode 100644 index 00000000000..b520dcd2d84 --- /dev/null +++ b/translations/README.chs.md @@ -0,0 +1,113 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) + +# 第一次参与开源 + +万事起头难。特别是和其他人合作时,犯错格外令人不舒服。不过,开源的本质就是和其他人合作。我们希望为初学者带来一个简单的方法去学习及参与开源项目。 + +阅读文章和观看教程会有所帮助。不过,有什么方法能比实际动手做更好?本项目旨在指导初学者及简化初学者参与开源的方式。记住:过程越轻松,学习效益越高。如果你想要做出第一次贡献,只需按照以下简单步骤操作即可。我们答应你,这将很好玩 :) + +fork this repository + +如果你的电脑上尚未安装 git, 请按照这个[ 安装指引 ](https://help.github.com/articles/set-up-git/)进行安装。 + +## Fork(复制)本代码仓库 + +点击图示中的按钮去 Fork 这个代码仓库。 +这个操作会将代码仓库复制到你的账户名下。 + +## Clone(克隆)代码仓库 + +clone this repository + +接下来,将复制后的代码仓库克隆到你的电脑上。点击图示中的绿色按钮,接着点击复制到剪切板按钮(将代码仓库地址复制下来) + +随后打开命令行窗口,敲入如下 git 命令: + +``` +git clone "刚才复制的 url 链接" +``` +"刚才复制的 url 链接"(去掉双引号)就是复制到你账户名下的代码仓库地址。获取这链接地址的方法请见上一步。 + +copy URL to clipboard + +譬如: +``` +git clone https://github.com/你的Github用户名/first-contributions.git +``` + +'你的 Github 用户名' 指的就是你的 Github 用户名。这一步,你将复制到你账户名下的 first-contributions 这个代码仓库克隆到本地电脑上。 + +## 新建一个分支 + +下面的命令能在命令行窗口中,把目录切换到 first-contributions + +``` +cd first-contributions +``` +接下来使用 `git checkout` 命令新建一个代码分支 +``` +git checkout -b <新分支的名称> +``` + +譬如: +``` +git checkout -b add-myname +``` + +(新分支的名称不一定需要有* add *。然而,在新分支的名称加入* add *是一件合理的事情,因为这个分支的目的是将你的名字添加到列表中。) + +## 对代码进行修改,而後 Commit (提交) 修改 + +打开 `Contributors.md` 这个文件,更新文件内容,将你的名字加上去,保存修改。`git status` 这命令会列出被改动的文件。接着 `git add` 这命令则可以添加你的改动,就像如下这条命令。 + +git status + +``` +git add Contributors.md +``` + +现在就可以使用 `git commit` 命令 commit 你的修改了。 +``` +git commit -m "Add <你的名字> to Contributors list" +``` +将 `<你的名字>` 替换为你的名字 + +## 将改动 Push(发布)到 GitHub + +使用 `git push` 命令发布代码 +``` +git push origin <分支的名称> +``` +将 `<分支的名称>` 替换为之前新建的分支名称。 + +## 提出 Pull Request 将你的修改供他人审阅 + +前往 Github 你的代码仓库,你会看到一个 `Compare & pull request` 的按钮。点击该按钮。 + +create a pull request + +接着再点击 `Create pull request` 按钮,正式提交 pull request。 + +submit pull request + +不久之后,我便会把你所有的变化合并到这个项目的主分支。更改合并后,你会收到电子邮件通知。 + +### [ 更多资料 ](../additional-material/git_workflow_scenarios/additional-material.md) + +## 接下来做什么呢? + +为你第一次的贡献庆祝吧,不要忘记和你的朋友以及迷弟迷妹们分享我们的[网站](https://roshanjossey.github.io/first-contributions/#social-share)哟! + +如果有任何疑问或想获得更多协助,欢迎加入我们的 [Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY)! + +还等什么,马上加入到其他项目的开发中去吧。为了方便你快速上手,我们收集了当前流行的众多代码仓库中,适合初学者解决的[问题列表](https://roshanjossey.github.io/first-contributions/#project-list)。 + +## 使用其他工具的教程 + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code +|---|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)|[Visual Studio Code](../github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.cht.md b/translations/README.cht.md new file mode 100644 index 00000000000..cbc5ff0e340 --- /dev/null +++ b/translations/README.cht.md @@ -0,0 +1,116 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) + +# 第一次參與開源 + +萬事起頭難。特別是和其他人合作時,犯錯格外令人不舒服。不過,開源的本質就是和其他人合作。我們希望為初學者帶來一個簡單的方法來學習及參與開源項目。 + +閱讀文章和觀看教學會有所幫助。不過,有什麼方法能比在不會弄亂任何東西的情況下,實際動手做來得更好?本項目旨在指導初學者及簡化初學者參與開源的方式。記住:過程越輕鬆,學習效益越高。如果妳/你想要做出第一次貢獻,只需按照以下簡單步驟操作即可。跟你保證,這會很好玩 :) + +#### *如果你不喜歡使用指令列,[這裡有使用圖形界面工具的教學。]( #使用其他工具的教學)* + +fork this repository + +如果你的電腦上尚未安裝 git,請按照這個[安裝指引(英文)](https://help.github.com/articles/set-up-git/)進行安裝。 + +## 分叉(Fork)本代碼庫 + +點選圖示中的按鈕來 Fork 這個 Git 儲存庫。 +這個操作會將儲存庫分叉到你/妳的 GitHub 帳號下。 + +## 複製(Clone)代碼庫 + +clone this repository + +接下來,將複製後的儲存庫複製到你/妳的電腦上。點選圖示中的綠色按鈕,接著點選複製到剪切板按鈕(將儲存庫地址複製下來) + +隨後打開命令行窗口,敲入如下 git 命令: + +``` +git clone "url you just copied" +``` +"url you just copied"(去掉雙引號)就是複製到妳/你帳戶名下的儲存庫地址。取得這鏈接地址的方法請見上一步。 + +copy URL to clipboard + +譬如: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +'this-is-you' 指的就是你/妳自己的 GitHub 用戶名。這一步,會將你/妳的 first-contributions 儲存庫複製到你的電腦上。 + +## 新建一個分支 + +下面的命令能在命令行窗口中,把目錄切換到 first-contributions。 + +``` +cd first-contributions +``` +接下來使用 `git checkout` 命令建立一個程式碼分支: +``` +git checkout -b +``` + +譬如: +``` +git checkout -b add-david +``` + +(新分支的名稱不一定需要有 *add*。然而,在這個新分支的名稱加入 *add* 是一件合理的事情,因為這個分支的目的是將妳/你的名字添加到貢獻者列表中。) + +## 對程式碼進行修改,然後提交 (Commit)) 修改 + +使用妳/你喜歡的文字編輯器打開 `Contributors.md` 這個文件,更新文件內容,將自己的名字加上去,然後存檔。在命令窗口執行 `git status`,這會列出被更動的文件。接著 `git add` 這命令則可以添加更動項目到分支裡,就像以下這條命令。 + +git status + +``` +git add Contributors.md +``` + +現在就可以使用 `git commit` 命令 commit(提交)你/妳的修改了。 +``` +git commit -m "Add to Contributors list" +``` +將 `` 替換為自己的名字 + +## 將更動發佈(Push)到 GitHub + +使用 `git push` 命令發佈代碼 +``` +git push origin +``` +將 `` 替換為之前新建的分支名稱。 + +## 提出 Pull Request 將你/妳的修改供他人審閱 + +前往先前自己 Fork 的 GitHub 儲存庫,會看到一個 `Compare & pull request` 的按鈕,點選該按鈕。 + +create a pull request + +接著再點選 `Create pull request` 按鈕,正式提交 pull request。 + +submit pull request + +不久之後,如果妳/你更改的文件與原本沒有衝突,我們會把所有的變化合併到這個項目的主分支。 +變更合併後,妳/你會收到通知 email。 + +## 接下來做什麼呢? + +在[這個網站](https://roshanjossey.github.io/first-contributions/#social-share)慶祝妳/你的成就並跟朋友及追隨者分享。 + +如果有任何疑問或想獲得更多協助,歡迎加入我們的 [Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) + +現在就動手為其他專案貢獻你/妳的心力。我們整理了一個清單,裡面的專案都有簡單的議題可以著手。[去看看吧!](https://roshanjossey.github.io/first-contributions/#project-list) + +### [ 更多資料 ](../additional-material/git_workflow_scenarios/additional-material.md) + +## 使用其他工具的教學 + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)|[Visual Studio Code](../github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](../sourcetree-macos-tutorial.md)| + diff --git a/translations/README.cs.md b/translations/README.cs.md new file mode 100644 index 00000000000..5e11cab7c73 --- /dev/null +++ b/translations/README.cs.md @@ -0,0 +1,128 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# První příspěvek + +Život je těžký. Obzvláště když něco děláte poprvé. V případě, že na něčem spolupracujete, není dělání chyb něco, co by vám dělalo radost. My bychom rádi zjednodušili cestu novým přispěvovatelům do open-source při jejich učení se jak na to. + +Čtení článků nebo shlédnutí video návodů jsou také cesty, ale co je lepší než si danou věc přímo osahat na vlastní kůži v reálném prostředí? Tento projekt je zaměřen na poskytnutí pomoci začátečníkům s jejich prvním přispěním do open-source. Pokud jste jím právě vy, následujte kroky popsané níže. + +#### *Pokud nemáte rádi příkazovou řádku, [zde najdete návody na použití nástrojů s GUI (grafické uživatelské rozhraní)]( #tutorials-using-other-tools )* + + +forkněte tento repozitář + +Pokud namáte nainstalovaný git, [nainstalujte si jej]( https://help.github.com/articles/set-up-git/). + +## Forkněte tento repozitář + +Forkněte (vytvoření kopie z originálu, z anglického *fork* - *vidlička*, jako vytvoření nové odnože) tento repozitář kliknutím na tlačítko **Fork** nahoře na této stránce. Tím vytvoříte kopii tohoto repozitáře na svém vlastním GitHib účtu. + +## Naklonujte repozitář + +naklonujte tento repozitář + +Nyní nakolujte (anglicky *clone*) forknutý repozitář na váš počítač, nakolování není nic jiného než stáhnutí obrazu repozitáře k vám na počítač. Na vašem GitHub účtu si otevřete forknutý repozitář, klikněte na tlačítko **Clone or download** a následně v okýnku, které se objeví, klikněte na tlačítko s ikonkou **copy to clipboard** vedle URL adresy, čímž si ji zkopírujete do schránky. + +Teď otevřte terminál a spusťte následující příkaz: + +``` +git clone "url které jste právě zkopírovali" + +``` + +zkopírujte adresu do schránky + +Například: + +``` +git clone https://github.com/vase-username/first-contributions.git +``` + +Tímto na svém počítači vytvoříte složku se soubory daného repozitáře. + +## Vytvořte větev + +V příkazové řádce se přepněte do složky s repozitářem (pokud v ní už nejste) + +``` +cd first-contributions +``` + +Nyní vytvořte novou větev (anglicky *branch*) za použití příkazu `git checkout`: + +``` +git checkout -b +``` + +Například: +``` +git checkout -b pridani-meho-jmena +``` + +Jméno větve by mělo vypovídat o tom, co kód nebo cokoliv jiného do ní přidané bude dělat/vykonávat, případně proč se daná věc děje. + +## Udělejte změny a zaznamenejte je + +Otevřete soubor `Contributors.md` v textovém editoru a přidejte do něj své jméno. Napiště jej někam doprostřed a soubor uložte. + +git status + +Pokud teď v příkazové řádce spustíte příkaz `git status`, uvidíte jaké změny byly v repozitáři provedeny. + +Tyto změny do dané větvě přidáte příkazem `git add`: + +``` +git add Contributors.md +``` + +Zbýva je teď už jen potvrdit (anglicky *commit*) příkazem `git commit`: + +``` +git commit -m "Add to Contributors list" +``` + +Za přepínač `-m` se píše co dané změny představují, popis by měl být jednoduchý ale výstižný. + +## Protlačte změny na GitHub + +Nyní změny provedené lokálně na počítači protlačíme (anglicky *push*) na GitHub příkazem `git push`: + +``` +git push origin +``` + +## Předložte své změny k posouzení + +Pokud se nyní podíváte do svého GitHub repozitáře, uvidíte tlačítko **Compare & pull request**. Klikněte na něj. + +vytvořte pull request + +Teď vytvořte žádost o přetažení vaší větve do originálního repozitáře (anglicky *pull request*). + +potvrďte pull request + +Brzy budu provádět zapracování vašich změn do hlavní (anglicky *master*) větve tohoto projektu. Až se do ní vaše změny dostanou, dostanete emailové upozornění. + +## Kam dále? + +Blahopřejeme! Právě jste dokončili standardní _fork -> clone -> edit ->_ průběh práce (anglicky *workflow), se kterým se jako přispěvatel do projektů setkáte dennodenně. + +Oslavte svůj první příspěvek se svými přáteli a následovníky přes [webovou aplikaci](https://roshanjossey.github.io/first-contributions/#social-share). + +V případě, že byste měli jakékoliv otázky nebo potřebovali pomoct, můžete se [přidat k našemu Slack teamu](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Nyní vám už nic nebrání v příspívání do ostatních projektů. Připravili jsme pro vás seznam projektů, které mají jednoduché záležitosti k vyřešení/naprogramování, se kterými můžete začít. Podívejte se [zde](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Další materiály](additional-material/git_workflow_scenarios/additional-material.md) + + +## Návod za použití dalších nástrojů + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.da.md b/translations/README.da.md new file mode 100644 index 00000000000..39f31658263 --- /dev/null +++ b/translations/README.da.md @@ -0,0 +1,125 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Første bidrag + +Det er svært. Det er altid svært når det er første gang. Specielt hvis man samarbejder er det ikke rart at begå fejl. Vi vil simplificere den store udfordring det er for nybegyndere at lære om open-source, og at lave deres f'rste bidrag. + +At læse artikler og se video guides hjælper, men hvad er bedre end at bruge det i praksis? Dette projekt håber at kunne tilbyde vejledning og gøre det overkommeligt for alle at lave deres første open-source bidrag. + +#### *Hvis du ikke er komfortabel med command line, [her er vejledninger til GUI værktøjer]( #tutorials-using-other-tools )* + + +fork this repository + +Har du ikke Git på din maskine kan du [installere det]( https://help.github.com/articles/set-up-git/). + +## Fork dette repository + +Fork dette repo ved at klikke på "fork" knappen øverst på siden. +Dette vil lave en kopi af projektet i din Github konto. + +## Clone dette repository + +clone this repository + +Næste trin er at "clone" dit nye repository til din maskine. Naviger til din Github account og åbn dit nye repository, derefter find "clone" øverst oppe og tryk på knappen. Tryk *copy to clipboard* ikonet. + +Åbn en terminal og kør den følgende git command: + +``` +git clone "din url" +``` + +hvor "din url" skal erstattes med den URL du kopieret i forrige trin. + +copy URL to clipboard + +Eksempel: +``` +git clone https://github.com/dit-brugernavn/first-contributions.git +``` +Erstat 'dit-brugernavn' med dit GitHub brugernavn. Her kopierer vi indholdet af first-contributions repositoriet fra din Github konto, til din lokale PC. + +## Opret en branch + +Åbn en konsol og cd til dit lokale repository (hvis ikke du allerede er der): + +``` +cd first-contributions +``` +Derefter opretter du en branch med kommandoen `git checkout`: +``` +git checkout -b +``` + +Eksempel: +``` +git checkout -b add-alonzo-church +``` +(Navnet på din branch behøver ikke at indeholde ordet *add*, men det giver mening at inkludere det her da branchen er til for at tilføje dit navn til en liste med navne.) + +## Lav dine ændringer og commit dem + +Åben filen `Contributors.md` i en text editor og tilføj dit navn til listen. Undgå at tilføje dit navn øverst eller nederst på listen, men helst et sted i mellem. Når dette er gjort så gem filen. + +git status + + +Hvis du går til konsollen og kører kommandoen `git status`, vil du se dine ændringer. + + +Tilføj disse ændringer til din branch med kommandoen `git add`: +``` +git add Contributors.md +``` + +Derefter commit ændringerne med kommandoen `git commit`: +``` +git commit -m "Add to Contributors list" +``` +Erstat `` med dit Github brugernavn. + +## Push ændringer til Github + +Push dine ændringer til Github med kommandoen `git push`: +``` +git push origin +``` +Erstat `` med navnet på den branch du oprettede tidligere. + +## Indgiv ændringer til inspektion + +Hvis du går ind på dit repository på Github, så vil du se en `compare & pull request` knap. Klik på den. + +create a pull request + +Indgiv nu din pull request. + +submit pull request + +Snart vil jeg merge dine ændringer ind i master branch'en af projektet. Du vil modtage en notifikation per email når dine ændringer er blevet merget. + +## Hvor til nu? + +Tillykke! Du har nu gennemført den udbredte _fork -> clone -> edit -> PR_ workflow som du vil støde oftest på som contributor! + +Fejr dit bidrag og del det med dine venner og følgere ved at gå til [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Du er velkommen til at kigge forbi vores Slack hvis du mangler hjælp, eller har spørgsmål. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Tillad os også at hjælpe dig i gang med dine næste bidrag. Vi har kompileret en liste af projekter med letty, overkommelige problemer du kan starte ud med. Check den ud her: [the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [ekstra materiale](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Guides med andre værktøjer + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](../github-windows-vs-code-tutorial.md)| + + diff --git a/translations/README.de.md b/translations/README.de.md new file mode 100644 index 00000000000..a60462bff38 --- /dev/null +++ b/translations/README.de.md @@ -0,0 +1,114 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +Repository forken + +Aller Anfang ist schwer. Gerade dann, wenn wir gemeinsam an etwas arbeiten, will niemand etwas Falsches tun. Aber Open Source dreht sich um Kooperation und lebt von den Beiträgen vieler Freiwilliger. Deshalb haben wir es uns zur Aufgabe gemacht, neuen Mitgliedern in der Open-Source-Gemeinde ihre ersten Schritte so einfach wie möglich zu machen. + +Natürlich helfen die vorhandenen Artikel und Videoanleitungen. Aber was kann besser sein, als es einfach einmal auszuprobieren mit dem Wissen, dass man nichts kaputt machen kann? Dieses Projekt will Anfängern zeigen, wie sie möglichst einfach ihren ersten Beitrag leisten. Bedenke: Je entspannter du bist, desto besser lernst du. Wenn du deinen ersten Beitrag leisten möchtest, folge diesen einfachen Schritten. Wir versprechen dir, es wird Spaß machen. + + +Wenn du Git noch nicht installiert hast, [ installiere es ]( https://help.github.com/articles/set-up-git/ ) + +## Repository forken + +Forke das Repository durch das Anklicken der Schaltfläche "Fork". Dadurch erhältst du deine eigene Version des Projektes in deinem Profil. + +## Repository klonen + +Repository klonen + +Klone das Repository auf deinen Computer. Klicke auf die Schaltfläche "Clone or download" und anschließend auf das "copy to clipboard"-Symbol. + +Öffne eine Kommandozeile und gib das folgende git-Kommando ein: + +``` +git clone "Deine kopierte URL" +``` +Statt 'Deine kopierte URL' (ohne Anführungszeichen) füge die Repository-URL aus dem vorherigen Schritt ein. + +URL kopieren + +Beispiel: +``` +git clone https://github.com/dein-Name/first-contributions.git +``` +An der Stelle 'dein-Name' muss dein GitHub-Username stehen. Mit diesem Befehl kopierst du den Inhalt deines first-contributions-Repository von GitHub auf deinen Computer. + +## Erstelle einen Branch + +Wechsle zum Repository-Verzeichnis auf deinem Computer (falls du es nicht schon getan hast). + +``` +cd first-contributions +``` +Erstelle nun einen Branch mit dem Befehl `git checkout`: +``` +git checkout -b +``` + +Beispiel: +``` +git checkout -b add-max-mustermann +``` + +(Der Name des Branches muss nicht unbedingt das Wort *add* beinhalten aber hier ist es sinnvoll, denn der Zweck deines Branches ist es ja, deinen Namen zur Liste hinzuzufügen.) + +## Mache die nötigen Änderungen und committe sie + +Öffne `Contributors.md` in einem Text-Editor und füge deine Namen hinzu. Beachte, dass du den Namen nicht am Anfang oder am Ende der Datei hinzufügst. Speichere die Datei anschließend. + +Gibst du in der Kommandozeile nun `git status` ein, siehst du die Änderungen. + +Füge die Änderungen mit dem Befehl `git add` zu deinem eben erstellten Branch hinzu: +``` +git add Contributors.md +``` + +Nun committest du deine Änderungen mit `git commit`: +``` +git commit -m "Add to Contributors list" +``` +Ersetze `` mit deinem Namen. + +## Pushe die Änderung zu GitHub + +Pushe die Änderungen mit `git push`: +``` +git push origin +``` +Ersetze `` mit dem Namen des Branches, den du zuvor erstellt hast. + +## Sende deine Änderungen zum Review + +Wenn du jetzt zu deinem Repository auf GitHub gehst, siehst du einen Knopf `Compare & pull request`. Klicke darauf. + +Erstelle einen pull request + +Erstelle einen Pull Request indem du auf die Schaltfläche `Create pull request` klickst. + +Pull Request senden + +Roshan Jossey wird nun deine Änderungen in den Master Branch dieses Projekts mergen. Du erhältst eine E-Mail sobald dies geschehen ist. + +## Wie geht es weiter? + +Glückwunsch! Du hast so eben den Standard-Workflow *Fork -> Clone -> Edit -> Pull Request* beendet, der dir als Mitwirkender häufig begegnen wird. + +Feiere deinen Beitrag zum Projekt und teile ihn mit deinen Freunden und Followern über unsere [Web-App](https://firstcontributions.github.io/#social-share). + +Wenn du weitere Fragen hast, kannst du Mitglied in unserem Slack-Team werden. [Join Slack Team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Falls du jetzt zu anderen Projekten beitragen möchtest, dann haben wir für dich eine Liste von einfachen, ersten Issues zusammengestellt, an denen du arbeiten kannst. Diese Projekt-Liste findest du [in unserer Web-App](https://firstcontributions.github.io/#project-list). + +## Tutorials mit anderen Tools + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)|[Visual Studio Code](../github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.eg.md b/translations/README.eg.md new file mode 100644 index 00000000000..905072ab854 --- /dev/null +++ b/translations/README.eg.md @@ -0,0 +1,157 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) +#
مساهمتك الأولى
+ +
+الصعوبة متوقعة لما تبدأ أي مشروع جديد، خصوصاً لو كان المشروع بيتضمن ناس تانية، ودة بيخلي الوقوع في الخطأ مزعج ومتعب. +
+لكن المساهمة في مشاريع مفتوحة المصدر اسسها العمل الجماعي والعطاء. +
+في المشروع دة هدفنا هو تبسيط الطريق لأول مساهمة ليك. +
+ +
+ممكن تقرأ وتتفرج على فيديوهات على الإنترنت عشان تعرف تبدأ فى المساهمة للمشاريع مفتوحة المصدر، لكن هتستفيد أكتر لو عرفت تساهم في مشروع دلوقتي من غير خوف لحسن تعمل حاجة غلط. المشروع اللى انت فاتحه حاليا بيركز انه يوفرلك التوجيهات الأولية اللي هتحتجها عشان تبدأ أول مساهمة ليك. مش مشكلة تغلط المهم انك تتعلم من الغلط ودة الهدف هنا. تابع الخطوات واحدة واحدة ونوعدك انك هتستمتع. +
+ + +#### *Read this in [other languages](../Translations.md)* + + +
+لو ماكنش عندك git على جهازك حمله من هنا. +
+ +##
أفصل المشروع دة - Fork this Repository
+fork this repository +
+خد نسخة من المشروع دة (أو افصله) عن طريق انك تدوس على Fork في أعلى الصفحة. +لو عملت كدة فأنت اخدت نسخة من الفولدر دة فى حسابك على github. +
+ +##
إنسخ المشروع دة - Clone the repository
+ +clone this repository + +
+انسخ المشروع دة لجهازك. +اضغط Clone بعدين دوس على أيقونة Copy to clipboard +
+copy URL to clipboard +
+إفتح التريمنال وأكتب الأمر دة: +
+ +``` +git clone "url you just copied" +``` + +
بدل "url you just copied" حط الرابط اللي نسخته من الخطوة اللي فاتت، الرابط دة بتاع المشروع اللي على حسابك فى github.
+ +
على سبيل المثال:
+ +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +
+في هذا المثال دة لاحظ ان 'this-is-you' هيكون إسم حسابك في موقع github، الأمر دة هينسخ محتويات المشروع لجهازك الخاص عشان تقدر تعدل عليه بحرية في أي وقت. +
+
+ +##
فصل فرع - Create a branch
+ + +
بما اننا عايزين نعمل تغيير فى الفايل اللى عملناله نسخة على الجهاز.. الأول ننتقل للفولدر اللي لسة نسخينه:
+ +``` +cd first-contributions +``` + +
قبل مانعمل التغيير هنعمل "فرع" وهنديله اسم زي كدة:
+ +``` +git checkout -b "add-your-name" +``` + +
هتحط اسمك بدل your-name
+ +
مثلا:
+ +``` +git checkout -b "add-alonzo-church" +``` + +
+ +##
غيّر التغيير اللي حابب تغيره:
+ +
+التغيير اللي هتغيره فى الحالة دي انك تحط اسمك فى نهاية قايمة الأسماء فى فايل. افتح فايل اسمه "Contributors.md" بالـ text editor المفضل ليك وحط إسمك و إحفظ الفايل. +بعد كدة ارجع للترمينال وأكتب الأمر دة git status الأمر دة بيظهر لك أي تغيرات حصلت في المشروع. +عشان تضيف التغيرات دي للفرع بتاعك هتستخدم الأمر دا git add. +
+ +``` +git add Contributors.md +``` + +
حتى الأن انت عندك فرع فيه التغيير، عشان تبعت التغيير دة وتتمه هيتعمل على خطوتين: الأولى انك تعمل للتغيير دة اسم فهتستخدم الأمر git commit.
+ +``` +git commit -m "Add to Contributors list" +``` + +
إستبدل <your-name> بإسمك.
+
+ +##
بعدين ترفع التغيررات - Push changes to Github
+ +
هترفع التغيررات عن طريق الأمر git push
+ +``` +git push origin "add-your-name" +``` + +
إستبدل <add-your-name> بإسم الفرع اللي انت لسة عامله .
+ + +
+

سلم تغيراتك للمراجعة

+ + +
في صفحة المشروع بتاعك على صفحتك الشخصية على github دوس على زرار Compare & pull request. هو ماكنش ظاهر قبل كدة.
+ +create a pull request + +
دلوقتي هتسلم طلبك لصاحب المشروع الأساسي عشان يراجع عليه، في الحالة دي الطلب بتاعك هيوصلي.
+ +submit pull request + +
بعد المراجعة هدمج تغيرراتك للفرع الرئيسي في المشروع. وهيتم تنبيهك عن طريق البريد الإلكتروني بدة.
+ +
لما يحصل وأقبل طلبك هتلاقي ان المشروع المنسوخ على حسابك مفيهوش التغيررات. فلازم تزامن المشروع الرئيسي باللي على حسابك بالخطوات دي:
+ + +##
طب اعمل ايه بعد كدة؟
+ +
+ احتفل بأول مساهمة ليك، أعمل شير مع صحابك ومتابعينك عن طريق زيارة الموقع دة. +
+ +
ممكن تنضم للفريق على Slack لو حابب تساعد او عندك أسئلة. إنضم للفريق على Slack
+ +
+ +
يلا نخليك تبدأ تساهم في مشاريع بجد؟ عملنا قائمة بمشاريع بمشاكل بسيطة ممكن تبدأ بيها النهاردة.
+ + +## + +##
لو هتستخدم ادوات تانية ممكن تتعلم من هنا
+ +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| diff --git a/translations/README.en-pirate.md b/translations/README.en-pirate.md new file mode 100644 index 00000000000..e88350fd83f --- /dev/null +++ b/translations/README.en-pirate.md @@ -0,0 +1,130 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +'tis hard. 'tis always hard th' first time ye do somethin'. Especially when ye be collaboratin', makin' mistakes ain't a comfortable thin'. We wanted t' simplify th' way new open-source contributors learn & contribute fer th' first time. + +Readin' tales & watchin' tutorials can help, but wha''s better than actually doin' th' stuff in a practice environment? This project aims at providin' guidance & simplifyin' th' way beginners make thar first contribution. If ye be lookin' t' make yer first contribution, follow th' steps below. + +#### *If ye're nah comfortable wit' command line, [here be tutorials usin' GUI tools.]( #tutorials-using-other-tools )* + +fork this repository + +If ye don't 'ave git on yer machine, [install it](https://help.github.com/articles/set-up-git/). + +## Fork this repository + +Fork this repo by skewerin' on th' fork button on th' top o' this page. +This will create a copy o' this repository in yer account. + +## Clone the repository + +clone this repository + +Now clone this repo t' yer machine. Go t' yer GitHub account, skewer on th' clone button 'n then skewer th' *copy to clipboard* icon. + +Open a terminal 'n run th' followin' git command: + +``` +git clone "url ye jus' copied" +``` + +where "url ye jus' copied" (without th' quote marks) be th' url t' this repository (yer fork o' this project). See th' previous steps t' obtain th' url. + +copy URL to clipboard + +Fer example: + +``` +git clone https://github.com/this-be-ye/first-contributions.git +``` + +where `this-be-ye` be yer GitHub username. Here ye're copyin' th' contents o' th' first-contributions repository in GitHub t' yer 'puter. + +## Create a branch + +Change t' th' repository directory on yer 'puter (if ye be nah already thar): + +``` +cd first-contributions +``` + +Now create a branch usin' th' `git checkout` command: + +``` +git checkout -b +``` + +Fer example: + +``` +git checkout -b add-luke-oliff +``` + +(Th' name o' th' branch does nah needs t' 'ave th' word *add* in it, but 'tis a reasonable thin' t' include 'cause th' purpose o' this branch be t' add yer name t' a list.) + +## Make necessary changes 'n commit those changes + +Now open `Contributors.md` file in a text editor, add yer name t' it. Don't add it at th' beginnin' or end o' th' file. Put it anywhere in between. Now, save th' file. + +git status + +If ye go t' th' project directory 'n execute th' command `git status`, ye'll see thar are changes. + +Add those changes t' th' branch ye jus' created usin' th' `git add` command: + +``` +git add Contributors.md +``` + +Now commit those changes usin' th' `git commit` command: + +``` +git commit -m "Add to Contributors list" +``` + +replacing `` with your name. + +## Push changes t' GitHub + +Push yer changes usin' th' command `git push`: + +``` +git push origin +``` + +replacin' `` wit' th' name o' th' branch ye created earlier. + +## Submit yer changes fer review + +If ye go t' yer repository on GitHub, ye'll see a `Compare & pull request` button. Click on that button. + +create a pull request + +Now submit th' pull request. + +submit pull request + +Soon I'll be mergin' all yer changes into th' master branch o' this project. Ye will get a notification email once th' changes 'ave been merged. + +## Where t' go from here? + +Well done! Ye jus' completed th' standard _fork -> clone -> edit -> PR_ workflow that ye'll encounter often as a contributor! + +Celebrate yer contribution 'n share it wit' yer hearties 'n followers by goin' t' [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Ye could join our slack crew in case ye needs any help or 'ave any riddles. [Join our slack crew](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Now let's get ye started wit' contributin' t' other projects. We've compiled a list o' projects wit' easy issues ye can get started on. Check out [th' list o' projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](../additional-material/git_workflow_scenarios/additional-material.md) + +## Tutorials Usin' Other Tools + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| diff --git a/translations/README.es.md b/translations/README.es.md new file mode 100644 index 00000000000..9f49efdf86a --- /dev/null +++ b/translations/README.es.md @@ -0,0 +1,121 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Primeras Contribuciones + +Es complicado. Resulta difícil la primera vez que haces algo, especialmente cuando colaboras con otros, pues cometer errores no es nada agradable. Nuestro objetivo es simplificar la forma en la que los nuevos contribuidores de _codigo abierto_ aprenden y contribuyen por primera vez. + +Leer artículos y ver tutoriales puede ayudar, pero, ¿Qué mejor que hacer las cosas en un entorno de prácticas? Este proyecto se enfoca en ser una guía y en simplificar la forma en la que los principiantes hacen su primera contribución. Si quieres hacer tu primera contribución, sigue los pasos que se muestran a continuación. + +#### *Si no estás familiarizado con la línea de comandos, [aquí hay tutoriales usando herramientas con Interfaz Gráfica (GUI)]( #tutoriales-con-otras-herramientas )* + +fork de este repositorio + +Si no tienes git en tu equipo, puedes encontrar instrucciones para instalarlo en [este enlace]( https://help.github.com/articles/set-up-git/ ). + +## Bifurca (*Fork*) este repositorio + +Haz un *fork* de este repositorio haciendo click en el botón "*Fork*" en la parte superior derecha en esta página. +Esto creará una copia de este repositorio en tu cuenta. + +## Clona (*Clone*) el repositorio + +clonar este repositorio + +Ahora clona este repositorio en tu equipo. Dirígete a tu cuenta de GitHub, haz click en el botón "*clone or download*" y luego haz click en el icono para *copiar al portapapeles*. + +Abre tu consola o terminal y ejecuta el siguiente comando de git: + +``` +git clone "url que acabas de copiar" +``` + +Donde "url que acabas de copiar" (sin las comillas dobles) es la *url* a este repositorio (tu *fork* a este proyecto). Mira los pasos previos para obtener la *url*. + +copiar URL al portapapeles + +Por ejemplo: +``` +git clone https://github.com/este-eres-tu/first-contributions.git +``` +Donde `este-eres-tu` es tu usuario de GitHub. Aquí estás copiando los contenidos del repositorio *first-contributions* en GitHub a tu equipo. + +## Crea una rama (*Branch*) + +Cambia al directorio del repositorio en tu equipo (si es que no estás ahí ya). + +``` +cd first-contributions +``` + +Ahora crea una rama (*branch*) usando el comando `git checkout`: +``` +git checkout -b +``` + +Por ejemplo: +``` +git checkout -b add-alonzo-church +``` +(El nombre de la rama no tiene por qué contener la palabra *add*, pero es razonable que lo tenga porque el objetivo de esta rama es añadir tu nombre a la lista.) + +## Haz los cambios necesarios y confirma (*Commit*) esos cambios + +Abre el archivo `Contributors.md` en un editor de texto y añade tu nombre. No lo añadas ni al principio ni al final del archivo, hazlo en cualquier otro sitio. Guarda el archivo. + +git status + +Si vas al directorio del proyecto y ejecutas el comando `git status`, verás que hay cambios. + +Agrega esos cambios a la rama (*branch*) que creaste anteriormente usando el comando `git add`: + +``` +git add Contributors.md +``` + +Ahora haz un *commit* sobre estos cambios ejecutando el comando `git commit`: +``` +git commit -m "Add to Contributors list" +``` +cambiando `` con tu nombre. + +## Manda (*Push*) tus cambios a GitHub + +Haz *push* de tus cambios usando el comando `git push`: +``` +git push origin +``` +Reemplaza `` con el nombre de la rama que creaste anteriormente. + +## Envía (*Submit*) tus cambios para ser revisados + +Si vas a tu repositorio en GitHub, verás un botón `Compare & pull request`. Haz click sobre este botón. + +crea una pull request + +Ahora envía la *pull request*. + +enviar la pull request + +Pronto estaré fusionando tus cambios (haciendo *merge*) con la rama master de este proyecto. Recibirás una notificación por correo electrónico cuando los cambios hayan sido fusionados. + +## ¿Cuáles son los siguientes pasos? + +¡Enhorabuena! ¡Has completado el flujo de trabajo *_fork -> clone -> edit -> PR_* que encontrarás habitualmente como contribuidor! + +Celebra tu contribución y compártela con tus amigos y seguidores yendo a [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +También podrías unirte a nuestro *equipo* de Slack en caso de que necesites ayuda o tengas alguna pregunta. [Únete a nuestro Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Ahora empieza a contribuir a otros proyectos. Hemos reunido una lista de proyectos con *issues* sencillas para que puedas empezar. Échale un ojo a la [lista de proyectos en la web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Material adicional](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutoriales con otras herramientas + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)| diff --git a/translations/README.fa.en.md b/translations/README.fa.en.md new file mode 100644 index 00000000000..86080d2da25 --- /dev/null +++ b/translations/README.fa.en.md @@ -0,0 +1,116 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +Tavajjoh : IN Noskheye Finglish Az Tarjomeye Farsie Hamin Matne Va Kheyli Az Vazhe Ha Be Shekle Englishe Khodeshoon Neveshte Shodan Chon Tarjomashoon Chize Jalebi Az Aab Dar Nemiad +# Avvalin Contribution (Hamkari, Mosharekat) + +Sakhte. Hamishe Anjam Dadane Kari Baraye Avvalin Bar Sakhte. Makhsoosan Vaghti Dari Mosharekat Mikoni, Eshtebah Kardan Kare Rahati Nist. Amma Open-Source Tamaman Darbareye Mosharekat Va Ham Karie. Ma Mikhastim Rah Ro Sade Konim Ta Contributer Haye Jadide Open-Source Betoonan Baraye Avvalin Bar Yad Begiran Va Mosharekat Konan + +Khoondane Maghale Va Didane Tutorial Ha Mitoone Komak Kone, Amma Chi Az Vaghan Anjam Dadane Kar Ha Bedoone Kharab Kari Behtare ? +Hadafe IN Proje Mohayya Kardane Yek Rahnama Va Sade Kardane Rahe Taze Kar Ha Baraye Avvalin Mosharekat.eshoone . Yadetoon Bashe: Harchi Relax Tar Bashi, Behtar Yad Migiri. Age Donbale IN Hasti Ke Avvalin Contribute Ro Anjam Bedi, Faghat Ghadam Be Ghadam Rahnamaye Zir Ro Donbal Kon. Ma Behet Ghol Midim, Gharare Khosh Begzare :D + +#### *IN Ro Dar [Zaban Haye Dige](../Translations.md) Bekhoonin.* + +fork this repository + +Age Rooye Computeret GIT Nadari,Nasbesh Kon +[Install It]( https://help.github.com/articles/set-up-git/). + +## IN Repository Ro Fork Kon + +IN Repo Ro Ba Click Kardan Rooye Dokmeye Fork Az Balaye Safhe Fork Kon. +IN Ye Copy Az Repository Miare Too Accountet + +## Repository Ro Clone Kon + +clone this repository +Hala Repo Ro Roo Computeret Clone Kon. Click Kon Roo Dokmeye Clome Va Bad Click Kon Rooye Icone *copy to clipboard* + +Terminal Ro Baz Kon Va Dastoorate Zir Ro Vared Kon: + +``` +git clone "url you just copied" +``` +Jayi Ke "URL You Just Copied" ( Bedoone Alamate " Vojood Dare ) URL IN Repository Ke Too Marhaleye Ghabli Didi Vojood Dare + +copy URL to clipboard + +Baraye Mesal: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +Jayi Ke `this-is-you` Hast Bayad Username Githube Ro Benevisi. Too IN Marhale Dari Mohtaviate Repositorye `first-contributions` Ro Copy Mikoni Too Computeret + +## Sakhtane Branch ( Shakhe ) +Too Cpmputeret Boro Directorye Repository ( Albate Age Hanooz Dakhelesh Nisti ) + +``` +cd first-contributions +``` +Hala Ba Estefade Az Dastoore `git checkout` Ye Branch Besaz: +``` +git checkout -b +``` + +Baraye Mesal: +``` +git checkout -b add-alonzo-church +``` +( Lazem Nist Avvale Esme Branch Vazheye "add" Ro Benevisi. Amma Az OON Ja Ke Dari Esmet Ro Be List Ezafe Mikoni Kare Manteghi-e Hast) + +## Taghirate Zaroori Ro Anjam Bede Va Bad Commit Kon + +Hala File `Contributors.md` Ro Too Text Editor Baz Kon, Esmet Ro Ezafe Kon, Va Bad Save Kon. Age Beri Dakhele Directorye Proje Va Dastoore `git status` Ro Bezani, Taghirat Ro Mibini. Va OON Taghirati Ke Dakhele Branchi Ke Sakhti Ro Ba Dastoore `git add` Ezafe Kon + +``` +git add Contributors.md +``` + +Hala Taghirat Ro Ba Dastoore `git commit` Commit Kon : +``` +git commit -m "Add to Contributors list" +``` +Be Jaye `` Esme Khodet Ro Benevis. + +## Taghirat Ro Be GitHub Push Kon . + +Ba Dastoore `git push` Taghiratet Ro Push Kon: +``` +git push origin +``` +Be Jaye `` Esme Branchi Ke Sakhte Boodi Ro Benevis. + +## Taghiratet Ro Baraye Barresi Submit Kon + +Age Beri Too Repository Roo GitHub, Dokmeye `Compare & pull request` Ro Mibini. Roosh Click Kon + +create a pull request + +Hala Darkhate Pull Ro Submit Kon + +submit pull request + +Be Zoodi Man Tamame Taghiratet Ro Be Branche "Master" Ezafe Mikonam. Be Mahze IN Ke Taghirat Submit Shod Email Daryaft Mikoni + +## Az IN Ja Koja Beram ? + +Mosharekatet Ro Jashn Begir Va Ba Follower Ha o Doostat Be Eshterak Bezar + [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Dar Soorati Ke Soal Dashti Ya Komak Khasti Mitooni Be Teame Slacke Ma Bepeyvandi +[Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Hala Bia Too Proje Haye Dige Mosharekat Konim. We Ye Listi Az Proje Hayi Ba Moshkelate Sade Gerd Avari Kardim Ke Mitooni Az OON Ja Shoroo Koni. +[the list of projects in web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Additional material](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutorials Using Other Tools + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.fa.md b/translations/README.fa.md new file mode 100644 index 00000000000..5170eb4c7d9 --- /dev/null +++ b/translations/README.fa.md @@ -0,0 +1,122 @@ +

Open Source Love + +License: MIT +Open Source Helpers

+

بخاطر ترجمه ضعیف شرمندم میتونین نسخه فینگلیش رو بخونین که قطعا بهتره

+

+اولین مشارکت

+

سخته . همیشه سخته که برای اولین بار کاری رو انجام بدی. مخصوصا وقتی داری همکاری میکنی. اشتباه کردن چیز راحتی نیست. اما دنیای متن باز تماماً درباره مشارکت و همکاری هست. ما میخواستیم تا راه رو ساده کنیم تا مشارکت کننده های جدید این همکاری رو برای بار اول یاد بگیرن

+

خوندن مقالات و نگاه کردن ویدیو های آموزشی میتونه کمک کنه. اما چی از واقعاً انجام دادن کار بدون خرابکاری بهتره ؟ هدف این پروژه فراهم کردن یک راهنما و ساده کردن مسیر برای تازه کار هاست تا اولین مشارکت رو انجام بدن. یادت باشه: هرچی ریلکس تر باشی. بهتر یاد میگیری. اگه میخوای اولین همکاریت رو انجام بدی فقط راهنمای قدم به قدم ساده زیر رو انجام بده. ما قول میدیم. خوش میگذره

+ +

اگه روی دستگاهت گیت نداری. + نصبش کن.

+

+این ریپوزیتوری رو فورک کن

+

این ریپوزیتوری رو از طریق کلیک کردن روی دکمه فورک بالای این صفحه فورک کن +این کار یک کپی از ریپوزیتوری تو اکانتت میسازه

+fork this repository +

+ریپپوزیتوری رو کلون کن

+

حالا ریپ و رو داخل کامپیوترت کلون کن. روی دکمه کلون کلیک کن و بعد روی (کپی در کلیپبورد) کلیک کن

+clone this repository +copy URL to clipboard +

ترمینال رو باز کن و دستورات زیر رو وارد کن

+
git clone "لینکی که کپی کردی"
+
+

جایی که (لینکی که کپی کردی) هست درواقع آدرس ریپوزیتوری هست که تو قدم پیش دیدی

+ +

برای مثال

+
git clone https://github.com/this-is-you/first-contributions.git
+
+

داخل لینک بجای +this-is-you +نام کاربری گیتهاب خودت رو قرار بده +تو این مرحله داری محتویات ریپوزیتوری رو از گیتهاب کپی میکنی تو کامپیوتر خودت

+

+برنچ (شاخه) بساز

+

اگه هنوز داخل پوشه ریپوزیتوری نیستی. برو داخلش

+
cd first-contributions
+
+

حالا با استفاده از دستور +git checkout +یک برنچ جدید بساز

+
git checkout -b <add-your-name>
+
+

برای مثال

+
git checkout -b add-alonzo-church
+
+

لازم نیست کلمه +add +رو اول اسم برنچ بنویسی اما از اونجا که هدف از ساخت این برنچ اضافه کردن اسمت به لیست هست کار منطقی ای هست

+

+تغیرات ضروری رو انجام بده و کامیت کن

+

حالا فایل +Contributors.md +رو داخل تکست ایدتور باز کن و اسمت رو به آخر فایل اضافه ک. بعد فابل رو ذخیره کن. اگه حالا وارد پوشه پروژه بشی و دستور +git status +رو اجرا کنی. میبینی که تغیرات اونجاست. حالا اون تغیرات رو به برنچی که ساختی اضافه کن با استفاده از دستور +git add

+
git add Contributors.md
+
+

حالا اون تغیرات با استفاده از دستور زیر کامیت کن +git commit

+
git commit -m "Add <your-name> to Contributors list"
+
+

جای +<your-name> +رو با اسم خودت عوض کن

+

+تغیرات رو به گیتهاب پوش کن

+

با استفاده از دستور زیر تغیراتت رو به گیتهاب پوش کن +git push

+
git push origin <add-your-name>
+
+

اسم +<add-your-name> +رو با اسم برنچی که ساخته بودی عوض کن

+

+تغیراتت رو برای برسی ثبت کن

+

اگه بری داخل ریپوزیتوریت تو گیتهاب. میبینی که دکمه +Compare & pull request +وجود داره . روش کلیک کن

+create a pull request +

حالا دستور پل رو ثبت کن

+submit pull request +

بزودی من تمام تغیرات تو رو به شاخه اصلی این پروژه اضافه میکنم +زمانی که تغیرات ثبت شد یک ایمیل دریافت میکنی

+

+از اینجا کجا برم ؟

+

مشارکتت جشن بگیر و با دوستات و دنبال کننده هات به اشتراک بزار +web app.

+

در صورتی که سوالی داشتی یا کمک خواستی میتونی به گروه اسلک ما ملحق بشی +Join slack team.

+

Now let's get you started with contributing to other projects. We've compiled a list of projects with easy issues you can get started on. Check out the list of projects in web app.

+

+Additional material +

+

+Tutorials Using Other Tools

+ + + + + + + + + + + + + + + +
GitHub DesktopVisual Studio 2017GitKraken
GitHub DesktopVisual Studio 2017GitKraken
+

+Self-Promotion

+

If you liked this project, star it on GitHub. +If you're feeling especially charitable, follow Roshan on +Twitter and +GitHub.

+

http://saasgrids.com

+
diff --git a/translations/README.fr.md b/translations/README.fr.md new file mode 100644 index 00000000000..4e2df4e78ac --- /dev/null +++ b/translations/README.fr.md @@ -0,0 +1,153 @@ +[![L'amour du logiciel libre](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Premières Contributions + +C'est toujours compliqué la première fois que l'on fait quelque chose. La peur de faire des fautes n'est pas du tout confortable, spécialement quand vous collaborez. Mais le monde du logiciel libre est fait de collaboration et de travail de groupe. Aussi, nous voulons simplifier l'apprentissage des nouveaux contributeurs au logiciel libre en vous enseignant à contribuer pour la première fois. + +Lire des articles et des tutoriels peut aider, mais qu'y a-t-il de mieux que d'essayer sans pouvoir faire d'erreurs ? Ce projet a pour ambition de fournir des conseils et simplifier la manière dont les apprentis font leur première contribution. Souvenez-vous : plus vous êtes serein, mieux vous apprenez. Si vous aspirez à faire votre première contribution, suivez tout simplement les étapes suivantes. Promis, ce sera amusant. + +embrancher ce repertoire + +Si vous n'avez pas git sur votre ordinateur, [ installez-le ]( https://help.github.com/articles/set-up-git/ ). + +## Embranchez ce répertoire (aussi appelé un Fork) + +Embranchez ce répertoire en cliquant sur le bouton de fork en haut de la page. +Cela va créer une copie du répertoire sur votre compte. + +## Clonez ce répertoire + +clonez ce répertoire + +Maintenant, clonez ce répertoire sur votre ordinateur. Cliquez sur le bouton clone puis cliquez sur l'icone *copier dans le presse-papier*. + +Ouvrez un invite de commande et exécutez les commandes git suivantes : + +``` +git clone "l'url que vous venez de copier" +``` +où "l'url que vous venez de copier" (sans les guillemets) est l'url du répertoire. Voir la section précédente afin d'obtenir l'url. + +copier l'URL dans le presse-papier + +Par exemple : +``` +git clone https://github.com/votre-nom-d-utilisateur/first-contributions.git +``` +où `votre-nom-d-utilisateur` est votre nom d'utilisateur GitHub. Ici vous êtes en train de copier le contenu du répertoire `first-contributions` depuis GitHub sur votre ordinateur. + +## Créez une branche + +Déplacez-vous dans le répertoire du projet nouvellement cloné (si vous n'y êtes pas encore) : + +``` +cd first-contributions +``` +Maintenant créez une branche avec le commande `git checkout` : +``` +git checkout -b +``` + +Par exemple : +``` +git checkout -b add-koffi-sani +``` +(Le nom de la branche n'a pas besoin de contenir le terme *add*, mais c'est raisonnable de l'inclure parce que l'objectif de cette branche est d'ajouter votre nom à une liste.) + +## Effectuez les modifications nécessaires et engagez-les + +Maintenant, ouvrez le fichier `Contributors.md` dans un éditeur de texte, ajoutez-y votre nom, et enregistrez-le. Si vous ouvrez l'invite de commande et vous exécutez la commande `git status`, vous verrez qu'il y a des modifications. Ajoutez ces modifications à la branche que vous venez de créer avec la commande `git add` : +``` +git add Contributors.md +``` + +Maintenant engagez ces modifications avec la commande `git commit`: +``` +git commit -m "Add to Contributors list" +``` +en remplaçant `` par votre nom. + +## Poussez les modifications vers GitHub + +Poussez vos modifications avec la commande `git push` : +``` +git push origin +``` +en remplaçant `` avec le nom de la branche précédemment créée. + +## Soumettez vos changements pour révision + +Si vous visitez votre répertoire sur Github, vous verrez un bouton `Compare & pull request`. Cliquez sur ce bouton. + +create a pull request + +Maintenant soumettez la demande de tirage. + +submit pull request + +Sous peu j'aurai fusionné toutes vos modifications avec la branche master de ce projet. Vous recevrez un mail de notification dès que la fusion sera effectuée. + +La branche master de votre embranchement ne subira pas de modification à cet instant. Pour que votre embranchement soit synchronisé avec le mien, suivez les étapes suivantes. + +## Gardez votre embranchement synchronisé avec ce répertoire + + D'abord, basculez sur la branche master + ``` + git checkout master + ``` + + Et ajouter l'url de mon répertoire comme `upstream remote url` : +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` +Ceci est une manière de dire à git qu'une autre version de ce répertoire existe à l'adresse spécifiée et que nous l'appelons `upstream`. Une fois les modifications fusionnées, cherchez la nouvelle version de mon répertoire : +``` +git fetch upstream +``` + +Ici nous cherchons toutes les modification dans mon embranchement (upstream remote). Maintenant, vous devez fusionner la nouvelle révision de mon répertoire avec votre branche master : +``` +git rebase upstream/master +``` +Ici nous appliquons toutes les modifications que vous avez cherché à la branche master. Si vous poussez la branche master maintenant, votre embranchement aussi aura les modifications : +``` +git push origin master +``` +Avertissement: Cette fois, vous poussez au répertoire distant appelé origin. + +A ce niveau j'ai fusionné votre branche `` avec ma branche master, et vous avez fusionné ma branche master avec votre branche master. Votre branche `` n'est plus utile, donc vous pouvez la supprimer : +``` +git branch -d +``` +et vous pouvez supprimer sa version dans le répertoire distant aussi : +``` +git push origin --delete +``` +Ceci n'est pas nécessaire, mais le nom de la branche montre que son objectif est assez spécifique. Sa durée de vie peut être courte. + +## Tutoriels en utilisant d'autres outils + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +## Où aller ensuite ? + +Vous pouvez aussi rejoindre notre équipe sur Slack au cas où vous auriez besoin d'aide ou auriez des questions. [Rejoindre l'équipe sur Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) + +Voici pour un débutant quelques problèmes que vous pourrez résoudre dans des répertoires populaires. Allez, visitez ces répertoires afin d'en apprendre davantage. + +|[![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|---|---|---|---|---|---|---|---| +|[exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|[![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[](https://github.com/adobe/brackets/labels/Starter%20bug)| +|[ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[brackets](https://github.com/adobe/brackets/labels/Starter%20bug)| +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)|[](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)| +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) |[Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | diff --git a/translations/README.gl.md b/translations/README.gl.md new file mode 100644 index 00000000000..5139553c79c --- /dev/null +++ b/translations/README.gl.md @@ -0,0 +1,107 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Primeiras Contribucións + +É difícil. Sempre é difícil a primeira vez que fas algo. Especialmente cando estás colaborando, equivocarse non é algo agradable. Pero no *open source* (o código abierto) todo trata de colaboración e de traballar xuntos. Quixemos simplificar a forma na que novos contribuidores *open-source* aprenden y contribúen pola primeira vez. + +Ler artículos e ver titoriais pode axudar, pero que haberá mellor que facer as cousas sen derramar nada?. Iste proxecto enfócase en prover unha guía e en simplificar a forma na que os novatos fan a súa primeira contribución. Lembra que mentres máis relaxado esteas, mellor aprenderás. Se queres facer a túa primeira contribución só tés que seguir os sinxelos pasos que se amosan a continuación. E prometemosche que será entretido. + +fork de éste repositorio + +Se aínda non tés git na túa máquina, [ instálao ]( https://help.github.com/articles/set-up-git/ ) + +## Bifurca(*Fork*) este repositorio + +Fai un *fork* (bifurcación) deste repo facendo click no botón "Fork" que está na cima desta páxina. +Isto creará unha copia deste repositorio na túa conta. + +## Clona(*Clone*) o repositorio + +clonar este repositorio + +A continuación clona este repo no teu equipo. Fai click no botón "*Clone*" e despois na icona para copiar ó portapapeis (clipboard) + +Abre a túa consola ou terminal e executa o seguinte comando de git: + +``` +git clone "url que copiache" +``` +Onde "url que copiache" (sen as comiñas) é a url deste repositorio. Mira os pasos previos para obter a url. + +copiar URL a clipboard + +Por exemplo: +``` +git clone https://github.com/o-teu-nome/first-contributions.git +``` +Onde "o-teu-nome" é o teu usuario de GitHub. Aquí estarás copiando os contidos do repositorio first-contributions en GitHub para o teu computador. + +## Crear unha póla(*Branch*) + +Cambia ó directorio do repositorio no teu computador (se é que non estás xa nel). + +``` +cd first-contributions +``` + +Agora crea unha branch (póla) usando o comando `git checkout` + +``` +git checkout -b +``` + +Por exemplo +``` +git checkout -b engade-María-Soliña +``` + +(O nome da branch non ten que incluir necesariamente a palabra 'engade', pero resulta razoable se consideramos que o propósito desta póla é engadir o teu nome a unha lista). + +## Fai os trocos necesarios e efectúa(*Commit*) eses trocos + +Agora abre o arquivo `Contributors.md` nun editor de texto, engade o teu nome e despois garda o arquivo. Se vas ó directorio do proxecto e executas `git status`, verás que hai trocos. Agrega eses trocos usando o comando `git add` tal como se amosa: +``` +git add Contributors.md +``` + +Agora podes facer commit sobre os trocos co comando `git commit` +``` +git commit -m "Add to Contributors list" +``` +cambiando `` polo teu nome. + +## Envía (*Push*) os teus trocos a GitHub + +Fai un *push* dos teus trocos usando o comando `git push` +``` +git push origin +``` +cambiando `` polo nome da branch que creaches antes. + +## Envía os teus trocos para seren revisados + +Se vas ó teu repositorio en GitHub, verás un botón `Compare & pull request`. Fai click nese botón: + +crea unha pull request + +Agora crea e envía a pull request: + +sube a pull request + +Axiña fusionarei os teus trocos (facendo *merge*) na master branch deste proxecto. Recibirás unha notificación por correo cando los trocos xa estean fusionados. + +### [ Material adicional ](../additional-material/git_workflow_scenarios/additional-material.md) + +## Titoriais con outras ferramentas + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +## Onde ir dende aquí? + +Tamén poderías unirte á nosa *equipa* en Slack no caso de que necesites axuda ou teñas algunha pregunta. [Únete ó noso Slack](https://firstcontributors.slack.com/join/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) diff --git a/translations/README.gr.md b/translations/README.gr.md new file mode 100644 index 00000000000..a9e8fc34930 --- /dev/null +++ b/translations/README.gr.md @@ -0,0 +1,127 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Πρώτη Συνεισφορά + +Είναι πάντα δύσκολο να κάνεις κάτι για πρώτη φορά. Ειδικά όταν συνεργάζεσαι με άλλους και κάνεις λάθη, η κατάσταση γίνεται ιδιαίτερη άβολη. Αλλά το σημαντικότερο πράγμα στο ανοιχτό λογισμικό είναι η συνεργασία και να δουλεύουμε μαζί. Θέλαμε να απλοποιήσουμε τον τρόπο με τον οποίο οι άνθρωποι που για πρώτη φορά συνεισφέρουν στο ανοιχτό λογισμικό, μαθαίνουν και κάνουν πράγματα. + +Μπορείτε να βοηθηθείτε διαβάζοντας άρθρα και βλέποντας ενημερωτικά βίντεο, αλλά τίποτα δε συγκρίνεται με το να δουλεύετε σε ένα πραγματικό project. Αυτό το έργο έχει στόχο να κατευθύνει και να απλοποιήσει τον τρόπο με τον οποίο οι σχετικά άπειροι συνεισφέρουν για πρώτη φορά σε κώδικα ανοιχτού λογισμικού. Σκεφτείτε ότι όσο πιο χαλαροί είστε τόσο πιο εύκολα μαθαίνετε. Εάν προσπαθείτε να κάνετε την πρώτη σας συνεισφορά σε κώδικα, ακολουθήστε τα επόμενα απλά βήματα. + +fork this repository + +Εάν δεν έχετε εγκατεστημένο το git στον υπολογιστή σας, [εγκαταστήστε το]( https://help.github.com/articles/set-up-git/ ) + +## Αντιγράψτε το αποθετήριο (fork) + +Αντιγράψτε το αποθετήριο πατώντας το κουμπί με τίτλο `Fork` στην κορυφή αυτής της σελίδας. Με αυτό τον τρόπο ένα ακριβές αντίγραφο του αποθετηρίου θα δημιουργηθεί στο λογαριασμό σας. + +## Αποθηκεύστε τοπικά το αποθετήριο (clone) + +clone this repository + +Τώρα αντιγράψτε το αποθετήριο στον υπολογιστή σας. Κάντε κλικ στο κουμπί `Clone or download` και μετά στο εικονίδιο δεξιά από το σύνδεσμο για αντιγραφή στο πρόχειρο. + +Ανοίξτε ένα τερματικό και τρέξτε την ακόλουθη git εντολή: + +``` +git clone "σύνδεσμος που μόλις αντιγράψατε" +``` +Όπου "σύνδεσμος που μόλις αντιγράψατε" (χωρίς τα εισαγωγικά) είναι ο σύνδεσμος για αυτό το αποθετήριο. Δείτε τα προηγούμενα βήματα για να βρείτε αυτόν τον σύνδεσμο. + +copy URL to clipboard + +Για παράδειγμα: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +Όπου 'this-is-you' είναι το όνομα χρήστη σας στο github. Εδώ αντιγράφετε τα περιεχόμενα του αποθετηρίου `first-contributions` απο το github στον υπολογιστή σας. + +## Δημιουργήστε ένα νέο παρακλάδι (branch) + +Μεταφερθείτε στο φάκελλο του αποθετηρίου στον υπολογιστή σας εάν δεν είστε ήδη εκεί. + +``` +cd first-contributions +``` +Τώρα δημιουργείστε ένα νέο παρακλάδι χρησιμοποιώντας την εντολή `git checkout` : +``` +git checkout -b +``` + +Για παράδειγμα: +``` +git checkout -b add-alonzo-church +``` +(Το όνομα του παρακλαδιού δεν χρειάζεται να περιέχει την λέξη *add* αλλά είναι λογικό να την συμπεριλάβουμε μιας και ο σκοπός του παρακλαδιού είναι να προσθέσουμε το όνομα μας σε μια λίστα.) + +## Πραγματοποιήστε αλλαγές και σώστε τες (add & commit) + +Τώρα ανοίξτε το αρχείο `Contributors.md` με έναν επεξεργαστή κειμένου. Χρειάζεται να είστε εξοικειωμένοι με την Markdown, μια ελαφριά γλώσσα σήμανσης. Δείτε στο [cheat sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) για το πως να χρησιμοποιήσετε την Markdown. + +Σε αυτήν την περίπτωση προσθέστε την παρακάτω σειρά στο τέλος του αρχείου `Contributors.md:` + +``` +- [Το-όνομα-σας](https://github.com/Your-username) +``` + +Για παράδειγμα: + +``` +- [John Doe](https://github.com/johndoe) +``` + +Σιγουρευτείτε ότι δεν υπάρχει κενό ανάμεσα στα `](` . Αποθηκεύστε το αρχείο και κλείστε το. + +Εάν πάτε στο φάκελλο του αποθετηρίου και τρέξετε την εντολή `git status`, θα δείτε ότι υπάρχουν κάποιες αλλαγές. Προσθέστε αυτές τις αλλαγές χρησιμοποιώντας την εντολή `git add`. + +``` +git add Contributors.md +``` + +Τώρα σώστε αυτές τις αλλαγές χρησιμοποιώντας την παρακάτω `git commit` εντολή. +``` +git commit -m "Add to Contributors list" +``` +όπου `` αντικαταστήστε με το όνομα σας + +## Αποθηκεύστε τις αλλαγές σας στο github (push) + +Αποθηκεύστε τις αλλαγές σας χρησιμοποιώντας την εντολή `git push` +``` +git push origin +``` +όπου `` αντικαταστήστε με το όνομα του παρακλαδιού(branch) που δημιουργήσατε προηγουμένως + +## Υποβάλλετε τις αλλαγές σας για έλεγχο + +Εάν πάτε στο αποθετήριο (repository) στο github θα δείτε ένα κουμπί με τίτλο `Compare & pull request`. Κάντε κλικ σε αυτό το κουμπί. + +create a pull request + +Τώρα υποβάλλετε την pull request. + +submit pull request + +Σύντομα θα ενσωματώσω όλες τις αλλαγές σας στο master branch του προγράμματος. Θα ειδοποιηθείτε με email όταν οι αλλαγές που κάνατε ενσωματωθούν. + +## Τι να κάνετε τώρα; + +Γιορτάστε και μοιραστείτε την συνεισφορά σας με τους φίλους και τους ακόλουθους σας πηγαίνοντας στο [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Μπορείτε να συμμετέχετε στην ομάδα μας στο slack σε περίπτωση που θέλετε κάποια βοήθεια ή έχετε κάποια ερώτηση. +[Η ομάδα μας στο slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Τώρα μπορείτε να ξεκινήσετε να συνεισφέρετε και σε άλλα project. Έχουμε φτιάξει μια λίστα από project με εύκολα προβλήματα για να ξεκινήσετε. Δείτε εδώ [η λίστα με τα project](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Επιπρόσθετο υλικό](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutorials χρησιμοποιώντας Άλλα Εργαλεία + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.guj.md b/translations/README.guj.md new file mode 100644 index 00000000000..2ed4961c520 --- /dev/null +++ b/translations/README.guj.md @@ -0,0 +1,140 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) +# પ્રથમ યોગદાન + +પ્રથમ વખત કંઈક કરવું મુશ્કેલ છે. ખાસ કરીને જ્યારે તમે મળીને કામ કરી રહ્યા હોવ ત્યારે ભૂલો કરવી સારી વાત નથી. પરંતુ એકબીજા સાથે મળીને અને એક જ જોડે કામ કરવું એ જ તો ઓપેન સોર્સ છે. અમે તમારો પ્રથમ ઓપન સોર્સ કોન્ટ્રિબ્યુશન / યોગદાન સરળ બનાવાનો પ્રયત્ન કરીશુ. + +આર્ટિકલ્સ વાંચન અને ઑનલાઇન ટ્યુટોરિયલ્સ મદદ કરી શકે છે, પરંતુ પોતે તે કામ કરવાથી સારું શું હોઇ શકે? આ પ્રોજેક્ટ તમે તમારી પ્રથમ કોન્ટ્રિબ્યુશન માટે દિશા નિર્દેશ આપશે. જો તમે તમારી પ્રથમ કોન્ટ્રીબ્યુશન કરવા માંગો છો તો આગળ આપેલી સ્ટેપ્સને અનુસરો. + +fork this repository + +જો તમારા કમ્પ્યુટર પર ગિટ નથી, [ તો install કરો](https://help.github.com/articles/set-up-git/) + + +## રિપોઝીટરીને ફોર્ક + +કાંટા (ફોર્ક) બટન પર ક્લિક કરવાથી આ રિપોઝીટરી ફૉર્ક થાય છે, આ તમારા GitHub એકાઉન્ટમાં આ રિપોઝીટરીની એક નકલ (કૉપિ) બનાવશે. + + +## રિપોઝીટરી ક્લોન + +clone this repository + + +હવે તમે આ રેપો તમારા કમ્પ્યુટરમાં ક્લોન કરો (અર્થ ડાઉનલોડ કરો). તમારા ગિટહબ એકાઉન્ટ પર જાવ, ક્લોન બટન પર ક્લિક કરો અને પછી કૉપિ ટુ ક્લિપબોર્ડ આઇકોન પર ક્લિક કરો. + + +તમારા કમ્પ્યુટર પર એક ટર્મિનલ / કમાંડ પ્રોમ્પ્ટ ખોલો અને નીચેનું git આદેશ ચલાવો: + +``` +git clone "યુઆરએલ જે તમે હમણાં જ નકલ(ક્લોન) કરી" +``` + + +જ્યાં "યુઆરએલ જે તમે હમણાં જ કૉપિ કર્યું છે" (સિવાય અવતરણ ચિહ્નો) આ સંગ્રહ માટે URL છે. (આ પ્રોજેક્ટનો તમારો ફૉર્ક) URL ને મેળવવા માટે પાછલા પગલાં જુઓ. + +ઉદાહરણ તરીકે: + +``` +git clone https://github.com/આ-તમે-છો/first-contributions.git +``` + +copy URL to clipboard + + +'આ-તમે-છો' તમારા ગીટબબ એકાઉન્ટનું નામ છે. અહીં તમે તમારા કમ્પ્યુટરમાં GitHub થી પ્રથમ-કંટ્રિબ્યુશન્સ રિપોને કૉપિ કરી રહ્યા છો અથવા તેના એક સ્થાનિક / લોકલ કૉપિ બનાવી રહ્યા છે. + +## એક બ્રાંચ બનાવો + +તમારા કમ્પ્યુટર પર બનાવેલ રિપોઝીટરીની કૉપિનાં ફોલ્ડર / ડિરેક્ટરીમાં જાવ (જો હજુ સુધી ન હોય તો નીચે આપેલ આદેશ ચલાવો) + + +``` +cd first-contributions +``` + + +હવે 'git checkout' આદેશનો ઉપયોગ કરીને એક નવી શાખા બનાવો. નવી શાખા બનાવવા માટે -b વિકલ્પનો ઉપયોગ થાય છે. + +``` +git checkout -b <તમારી-શાખા-નામ-ઉમેરો> +``` + +ઉદાહરણ તરીકે: + +``` +git checkout -b add-alonzo-church +``` + + +(શાખાના નામમાં 'add' ઉમેરવાની જરૂર નથી, પરંતુ તેમાં શામેલ કરવું યોગ્ય છે કારણ કે આ શાખાનો હેતુ એક નામ છે, જે નામ ઉમેરવાનું છે.) + +## આવશ્યક ફેરફારો કરો અને તે ફેરફારોને કમીટ કરો- + + +હવે 'Contributors.md` ફાઇલને એક ટેક્સ્ટ એડિટરમાં ખોલો અને તેના નામ લખો. ફાઇલની શરૂઆત અથવા અંતે તેમાં ઉમેરો. તેને મધ્યમાં ગમે ત્યાં રાખો. + +git status + + +જો તમે `git status` નિર્દેશ ચલાવશો, તો તમે કરેલા પરિવર્તન જોઈ શક્શો. તે પરિવર્તન બનાવવામાં આવેલ શાખામાં ઉમેરવા માટે 'git add` કમાન્ડ વાપરો. + + +``` +git add Contributors.md +``` + + +હવે તમારા પોતાના ફેરફારોને કમીટ કરો 'git commit કરો' આદેશનો ઉપયોગ કરી. + +``` +git commit -m "Add <તમારુ-નામ> to Contributors list" +``` + +<તમારુ નામ> ની જગ્યાએ તમારું નામ દાખલ કરો + + +## +તમારા ફેરફારો ને Github માં પુશ કરો + +`git push` ઉપયોગ કરીને તમારા પરિવર્તન ને પુશ કરો + +``` +git push origin <તમારી-શાખા-નામ-ઉમેરો> +``` + +`<તમારી-શાખા-નામ-ઉમેરો>` ની જગ્યાએ તમારી શાખાનુ નામ ઉમેરો. + +## તમારા ફેરફારોના રીવ્યુ માટે સબમિટ કરો + + +જો તમે તમારા github એકાઉન્ટ પર તમારી રિપો માં જાવ તો Compare & pull request નો ઓપ્શન હશે. તેને દબાવો. + +create a pull request + +હવે તમારી pull request સબમિટ કરો. + +submit pull request +ટૂંક સમયમાં હું તમારા ફેરફારો માટે આ પ્રોજેક્ટની માસ્ટર શાખામાં મર્જ ક્રી દઇશ. તમને એક મેલ આવશે જ્યારે તમારા ફેરફારો મર્જ થશે. + + +## અહીંથી ક્યાં જાઓ ? + +અભિનંદન! તમે હમણાં જ પૂર્ણ કર્યું છે _ફૉર્ક -> ક્લોન -> edit -> PR_ વર્કફ્લો જે તમે વારંવાર સહયોગકર્તા (contributor) તરીકે સામનો કરશો! + + +તમારા પ્રથમ યોગદાનની ઉજવણીમાં ઉજવણી કરો અને તમારા મિત્રો સાથે શેર કરો [વેબ એપ્લિકેશન](https://roshanjossey.github.io/first-contributions/#social-share) પર જઈને | + + +તમે અમારી સ્લેક ટીમને જોડો છો જો તમને કોઈ મદદની જરૂર હોય અથવા તમારી કોઈ સમસ્યા હોય તો [સ્લેક પે join કરો](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) + +હવે તમે અને પ્રોજેક્ટ્સમાં કંટ્ર્રીબ્યુટ કરવાનું શરૂ કરો. અમે તમારા માટે એક યાદી બનાવી છે જેમા ખૂબ સરળ મુદ્દાઓ છે [પ્રોજેક્ટ્સ ની સૂચિ] +(https://roshanjossey.github.io/first-contributions/#project-list) + +## અન્ય સાધનોનો ઉપયોગ કરીને ટ્યુટોરીયલ + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| diff --git a/translations/README.hb.md b/translations/README.hb.md new file mode 100644 index 00000000000..b9acd305dcd --- /dev/null +++ b/translations/README.hb.md @@ -0,0 +1,214 @@ +
+ Open Source Helpers + License: MIT + Open Source Love + +
+ +
+

תרומות ראשונות

+
+ +
+זה קשה. זה תמיד קשה כשעושים משהו בפעם הראשונה. במיוחד כאשר משתפים פעולה, לעשות טעויות זה לא משהו נוח. רצינו להקל על הדרך שבה תורמים בפעם הראשונה לומדים ותורמים בפעם הראשונה. +קריאת כתבות וצפייה בסרטוני הדרכה יכולים לעזור, אבל מה יותר טוב מאשר לבצע את הדברים בסביבת למידה? המטרה של הפרויקט הזה היא לתת הכוונה ולפשט את הדרך שבה מתחילים מבצעים את התרומה הראשונה שלהם. אם אתם מחפשים לבצע את התרומה הראשונה שלכם, עקבו אחרי הצעדים למטה. +
+ +
+

אם לא מתאים לכם להשתמש בטרמינל, כאן יש קישור תוך שימוש בכלים גרפיים +קישור לכלים גרפיים.

+
+ +
+

ניתן לקרוא את המאמר +בשפות אחרות.

+
+ + + +
+fork this repository +
+ +
+

בצעו FORK למאגר זה

+
+ +
+כדי לבצע FORK למאגר זה, ניתן ללחוץ על כפתור ה – FORK בתחילת העמוד. פעולה זה תיצור עותק של מאגר זה בחשבון שלכם. +
+ + +
+

שכפול המאגר

+
+ +
+ clone this repository +
+ +
+ +כעת, שכפלו את המאגר הזה למחשב שלכם. לכו לדף ה-GitHub שלכם, לחצו על כפתור השכפול ואז לחצו על הצלמית `העתק ללוח` +פתחו טרמינל והריצו את הפקודה הבאה: +
+ +``` +git clone "url you just copied" +``` +
+ +כאשר הביטוי `"url you just copied"` (ללא סימני הגרשיים) הוא הקישור למאגר שביצעתם עליו FORK מקודם. ראו את הצעדים הקודמים כדי להשיג את הקישור. +
+ +copy URL to clipboard + +
+לדוגמא: +
+ +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +
+ +כאשר `this-is-you` הוא שם המשתמש שלכם ב-GitHub. כאן, אתם מעתיקים את התוכן של מאגר first-contributions ב-GitHub לתוך המחשב שלכם. +
+ +
+

יצירת ענף

+
+ +
+תחליפו לתיקיית המאגר בתוך המחשב שלכם (אם אתם כבר לא נמצאים שם): +
+ +``` +cd first-contributions +``` +
+ +כעת, תצרו ענף בשימוש הפעולה `git checkout`: +
+ +``` +git checkout -b +``` +
+ לדוגמא: +
+ +``` +git checkout -b add-alonzo-church +``` + +
+(שם הענף לא חייב להכיל את המילה add בתוכו, אבל זה הגיוני להוסיף אותה מכיוון שהמטרה של הענף היא להוסיף את השם שלכם לרשימה) +
+ +
+

ערכו שינויים הכרחיים ובצעו להם commit

+
+ +
+ +כעת תפתחו את הקובץ, `Contributors.md` בתוכנת עריכת טקסט והוסיפו את השם שלכם אליו. אל תוסיפו את השם בתחילת הקובץ או בסופו. הוסיפו אותו באמצע. לאחר שסיימתם, שמרו את הקובץ. + + +אם תנווטו לתיקיית הפרויקט ותבצעו את הפעולה `git status`, תוכלו לראות את השינויים שביצעתם שם. +הוסיפו את השינויים האלו לענף שיצרתם תוך שימוש בפקודה `git add`: +
+ +``` +git add Contributors.md +``` +
+ +עכשיו, בצעו(commit) את שינויים הללו תוך שימוש בפקודת `git commit`: +
+ +``` +git commit -m "Add to Contributors list" +``` +
+ +החליפו את הביטוי `` .עם השם שלכם +
+ +
+

לדחוף את השינויים ל-GitHub

+
+ +
+ +דחפו את השינויים תוך שימוש בפקודה `git push`: +
+ +``` +git push origin +``` +
+ +החליפו את `` .עם השם של הענף שיצרתם מוקדם יותר +
+ +
+

הגישו את השינויים שלכם לסקירה

+
+ +
+ +אם תלכו למאגר שלכם ב-GitHub, אתם תראו כפתור עם הכיתוב `Compare & pull request`. לחצו על כפתור זה. + +create a pull request + +כעת, הגישו את בקשת הדחיפה (pull request): + +submit pull request + +בקרוב, אני אצרף את כל השינויים לתוך הענף הראשי של פרויקט זה. אתם תקבלו עדכון במייל ברגע שהשינויים ימוזגו. +
+ +
+

מחקו את הענף שלכם אחרי שבקשת הדחיפה אושרה

+
+ +
+

מה לעשות מכאן?

+
+ +
+כל הכבוד! כרגע סיימתם את מעגל הזרימה הסטנדרטי של Fork->Clone->Edit->PR שאתם תפגשו באופן שכיח כתורמים! +חגגו את התרומה שלכם ושתפו אותה עם חברים שלכם ועוקבים שלכם בכך שתלכו ל-web app. +אתם יכולים להצטרף לצוות הסלאק שלנו אם אתם צריכים עזרה או אם יש לכם שאלות. +הצטרפו לקבוצת סלאק. + +עכשיו אפשר להתחיל לתרום לפרוייקטים אחרים. הכנו רשימה של פרוייקטים על נושאים קלים שאתם יכולים להתחיל לעבוד עליהם. + +רשימה של פרוייקטים ב-web app. +
+ + + +
+

הדרכות בשימוש כלים אחרים

+
+ + diff --git a/translations/README.hi.md b/translations/README.hi.md new file mode 100644 index 00000000000..774e9ad2cab --- /dev/null +++ b/translations/README.hi.md @@ -0,0 +1,125 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) +# प्रथम योगदान + +पहली बार कुछ करना कठिन होता है| ख़ास तौर पर जब आप मिलकर काम कर रहे हों तब गलतियां करना अच्छी बात नहीं है | मगर आपस में मिलना और एक जुट होकर काम करना ही तो है ओपन सोर्स| हम आपका ये पहला ओपन सोर्स कॉन्ट्रिब्यूशन/योगदान आसान बनाने में आपकी मदद करेंगे | + +आर्टिकल्स पढ़ना और ऑनलाइन ट्यूटोरियलज़ देखना मदद कर सकते हैं मगर बिना कुछ गलत करे खुद वो काम करने से अच्छा क्या हो सकता है? यह प्रोजेक्ट आपको आपके पहले कॉन्ट्रिब्यूशन के लिए दिशा निर्देशन में मदद करेगा | याद रखिये - जितने तनाव मुक्त होकर आप सीखेंगे उतना ही बेहतर सीख पाएंगे | अगर आप अपनी पहली कॉन्ट्रिब्यूशन करना चाहते हैं तो आगे दिए गए स्टेप्स को फॉलो करें | + +fork this repository + +अगर आपके कंप्यूटर पर Git नहीं है तो, [इसे स्थापित करें](https://help.github.com/articles/set-up-git/) + +## रिपॉज़िटरी को फॉर्क करना + +कांटा (फॉर्क) बटन पर क्लिक करके इस रिपॉज़िटरी को फॉर्क कर सकते हैं| यह आपके GitHub खाते में इस रिपॉज़िटरी की एक प्रति (कॉपी) बना देगा। + +## रिपोजिटरी क्लोन + +clone this repository + +अब आप यह रेपो अपने कंप्यूटर में क्लोन (अर्थ डाउनलोड) करें | अपने गिटहब खाते पर जाएं, क्लोन बटन पर क्लिक करें और फिर कॉपी टू क्लिपबोर्ड आइकॉन पर क्लिक करें | + +अपने कंप्यूटर पर एक टर्मिनल/कमांड प्रांप्ट खोलें और निम्न git आदेश चलाएँ: + +``` +git clone "यूआरएल जिसे आपने अभी कॉपी किया" +``` + +जहाँ "यूआरएल जिसे आपने अभी कॉपी किया" (उद्धरण चिह्नों के बिना) इस भंडार के लिए यूआरएल है । (इस परियोजना का आपका फॉर्क) यूआरएल प्राप्त करने के लिए पिछले चरण देखें । + +उदाहरण के लिए: + +``` +git clone https://github.com/यह-तुम-हो/first-contributions.git +``` + +copy URL to clipboard + +`यह-तुम-हो` आपके GitHub अकाउंट का नाम है। यहाँ आप अपने कंप्यूटर में GitHub से फर्स्ट-कंट्रिब्यूशंज़ रेपो को कॉपी कर रहे हैं अथवा उसकी एक लोकल/स्थानीय कॉपी बना रहे हैं | + +## एक ब्राँच बनाएं + +अपने कंप्यूटर पर बनाई गई रिपॉजिटरी की कॉपी के फोल्डर/डायरेक्टरी में जाएँ (अगर अभी तक नहीं की है तो निम्न आदेश चलाएँ) + +``` +cd first-contributions +``` + +अब एक नई शाखा बनाएं `git checkout` कमांड का उपयोग करके | +नई शाखा बनाने के लिए -b ऑप्शन का उपयोग होता है । + +``` +git checkout -b <अपनी-शाखा-का-नाम-जोड़ें> +``` + +उदाहरण के लिए: + +``` +git checkout -b add-alonzo-church +``` + +( शाखा के नाम में `add` जोड़ने की आवश्यकता नहीं है, लेकिन इसमें शामिल होना उचित बात है क्योंकि इस शाखा का उद्देश्य एक सूची में अपना नाम जोड़ना है। ) + +## आवश्यक परिवर्तन करें और उन परिवर्तनों को कमिट करें- + +अब `Contributors.md` फ़ाइल को एक टेक्स्ट एडिटर में खोलकर इसमें अपना नाम लिखें। फ़ाइल की शुरुआत या अंत में इसे न जोड़ें। इसे बीच में कहीं भी रखें | + +git status + + +आप अगर `git status` निर्देश चलाएंगे , तो आप किये गए परिवर्तन देखेंगे। + +उन परिवर्तनों को बनाई गई शाखा में जोड़ने के लिए `git add` कमान्ड का उपयोग करें | + +``` +git add Contributors.md +``` + +अब अपने किये गए बदलावों को कमिट करें `git commit` आदेश का उपयोग करके | + +``` +git commit -m "Add <आपका-नाम> to Contributors list" +``` + +<आपका-नाम> की जगह अपना नाम डालें| + +## अपने बदलावों को Github में पुश करें| + +`git push` का उपयोग कर अपने परिवर्तन को पुश करें | + +``` +git push origin <अपनी-शाखा-का-नाम-जोड़ें> +``` + +`<अपनी-शाखा-का-नाम-जोड़ें>` की जगह अपनी शाखा का नाम डालें | + +## अपने बदलावों को रिव्यु के लिए सबमिट करें | + +अगर आप अपने github प्रोफाइल पर अपनी रेपो में जायेंगे तो आपको Compare & pull request का ऑप्शन दिखेगा| उसे दबाएं | +create a pull request + +अब अपनी pull request सबमिट करें | + +submit pull request +जल्द ही मैं आपके बदलावों को इस प्रोजेक्ट की मास्टर शाखा में मर्ज क्र दूंगा| आपको एक मेल आजायेगी जब आपके बदलाव मर्ज होंगे | + +## यहाँ से कहाँ जाएं ? + +बधाई! आपने अभी पूरा कर लिया है _fork -> clone -> edit -> PR_ वर्कफ़्लो जो आप अक्सर योगदानकर्ता के रूप में सामना करेंगे! + +अपने पहले योगदान की खुशी में जश्न मनाएं और अपने दोस्तों के साथ शेयर करें [वेब एप्प](https://roshanjossey.github.io/first-contributions/#social-share) पे जाके | + +आप हमारी स्लैक टीम को ज्वाइन कर सकते हैं अगर आपको कोई मदद चाहिए या आपके कोई परेशानी हों | [स्लैक पे ज्वाइन करें](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) + +अब आप और प्रोजेक्ट्स में कंट्रीब्यूट करना शुरू कर सकते हैं | हमने आपके लिए एक लिस्ट बनायीं है जो कि बहुत आसान मुद्दे हैं | [प्रोजेक्ट्स कि लिस्ट](https://roshanjossey.github.io/first-contributions/#project-list) + +## अन्य टूल का उपयोग करके ट्यूटोरियल + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| + + diff --git a/translations/README.hu.md b/translations/README.hu.md new file mode 100644 index 00000000000..aec2d2783fe --- /dev/null +++ b/translations/README.hu.md @@ -0,0 +1,122 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Első közreműködés nyilt forráskodú projektben + +Minden kezdet nehéz, ezért szeretnénk segíteni számodra az első lépésekben ahhoz, hogy bátran kódolj koóperatívan nyilt forráskodú projekteket. Senki sem szeret hibázni, de szerencsére itt most nyugodtan megteheted. A lényeg, hogy gyakorolj! + +A projekt célja, hogy útmutatást nyújtson, egyszerűsítse és segítse a kezdők első lépéseit nyilt forráskódú szoftverek közös programozásában. Ha te is most készülsz először ilyet csinálni, segítünk neked, kövessd az alábbi lépéseket. + +#### *Ha a parancssor kényelmetlen, [itt egy tutorial a GUI felület használatához.]( #tutorials-using-other-tools )* + +forkold ezt a repot + +Ha nincs a gépeden git, [telepítsd fel]( https://help.github.com/articles/set-up-git/). + +## Ágaztasd ezt a repot (fork) + +A Fork gomb kattintásával ágaztasd el ezt a repot. +Készíteni fog egy másolatot erről a reporól a te saját git fiókodba. + +## Klónozd a repot (clone) + +klónozd ezt a repot + +Most klónozd az elágaztatott repot a gépedre. Menj a GitHub fiókodra, nyisd meg a forkolt repositoryt, kattints a clone gombra, majd kattints a *copy to clipboard* ikonra. + +Nyiss egy terminált és futtasd a következő parancsot: + +``` +git clone "url you just copied" +``` +a "url you just copied" kifejezést, cseréld ki (idézőjelek nélkül) a vágólapra helyezett repository url címére (ami ebből a projektől ágazik). Az ágaztatás folyamatát lásd az előző lépésben. + +másold az URL címet a vágólapra + +Például: +``` +git clone https://github.com/a-te-git-neved/first-contributions.git +``` +a `a-te-git-neved` lesz a GitHub felhasználóneved. Ezzel letöltöd a first-contributions repositoryt GitHub-ról a saját számítógépedre. + +## Készíts egy ágat (branch) + +Navigálj a repository könytárába (ha nem ott vagy jelenleg): + +``` +cd first-contributions +``` +Most készítsünk egy ágat `git checkout` parancs használatával: +``` +git checkout -b +``` + +Például: +``` +git checkout -b add-gabor-takacs +``` +(A branch nevében nem kötelező, hogy benne legyen az *add* szó, de ésszerű belefoglalni, mert ennek az ágnak az a célja, hogy hozzáadja a nevünket egy listához.) + +## Végezd el a szükséges változtatásokat és rögzítsd azokat (commit) + +Nyisd meg a `Contributors.md` fájlt egy szövegszerkesztőben, majd add hozzá a neved. Ne a fájl elejére vagy végére helyezd, hanem a kettő közé. A kettő között bárhová teheted. Mentsd el a fájlt. + +git status + + +Ha a project könyvtárába navigálsz és futtatod a `git status` parancsot, akkor a következő módosításokat fogod látni: + + +Ezeket a módosításokat add hozzá a branchez a `git add` paranccsal: + +``` +git add Contributors.md +``` + +Commitoljuk a módosításokat a `git commit` paranccsal: +``` +git commit -m "Add to Contributors list" +``` +helyettesítsd `` kifejezést a saját neveddel. + +## Töltsd fel az elkészült változtatásokat a GitHub-ra (push) + +Töltsd fel a változtatásokat a `git push` paranccsal: +``` +git push origin +``` +helyettesítsd az `` kifejezést annak a branchnek a nevével, amit korábban létrehoztál. + +## Küldd be a módosításaidat ellenőrzésre (pull request) + +Ha a saját repodba navigálsz GitHub-on, látnod kell a `Compare & pull request` gombot. Kattints rá! + +create a pull request + +Sikeresen elküldted a pull requested. + +submit pull request + +Kis idő elteltével összevonja a változásokat a project fő ágában. Értesítést fogsz kapni emailben, ha a változások összefűzésre kerültek. + +## Hogyan tovább? + +Gratulálunk! Sikeresen teljesítetted az alapvető _fork -> clone -> edit -> PR_ folyamatot, melyet gyakran kell majd csinálnod közreműködőként! + +Ünnepeld meg az első kooperációdat és osszd meg barátaidall és követőiddel ennek a [web app](https://firstcontributions.github.io/#social-share)-nak a segítségével. + +Bármilyen kérdésed van vagy segítségre lenne szükséged, csatlakozz slack csapatunkhoz. [Csatlakozz a slack csapathoz.](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + +Itt az idő egy másik projektben is közreműködni. Összeállítottunk egy listát azokról a projektekről, melyek könnyebb feladatokat tartalmaznak az induláshoz. Nézd meg a [projektek listáját](https://firstcontributions.github.io/#project-list) a webalkalmazásban. + +### [Kiegészítő anyag](additional-material/git_workflow_scenarios/additional-material.md) + + +## Oktatóanyagok más eszközök használatával + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| diff --git a/translations/README.id.md b/translations/README.id.md new file mode 100644 index 00000000000..5016a3f21c1 --- /dev/null +++ b/translations/README.id.md @@ -0,0 +1,178 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Kontribusi Pertama + +Sulit. Selalu sulit saat pertama kali Anda melakukan sesuatu. Terutama ketika Anda berkolaborasi, membuat kesalahan bukanlah hal yang nyaman. Kami ingin menyederhanakan cara kontributor *open-source* baru belajar dan berkontribusi untuk pertama kalinya. + +Membaca artikel dan menonton tutorial dapat membantu, tetapi apa yang lebih baik daripada langsung mempraktikan hal-hal tersebut? Proyek ini bertujuan untuk memberikan panduan dan menyederhanakan cara memberikan kontribusi pertama bagi pemula. Jika Anda ingin memberikan kontribusi untuk pertama kalinya, ikuti langkah-langkah di bawah ini. + +#### _Jika Anda tidak nyaman dengan baris perintah, [di sini ada tutorial menggunakan GUI.](#tutorial-menggunakan-alat-lain)_ + +#### _Baca ini dalam [bahasa lain](translations/Translations.md)._ + +[🇮🇳](translations/Translations.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[🇧🇬](translations/README.bg.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇳🇵](translations/README.np.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[🇲🇾](translations/README.my.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇵🇭](translations/README.tl.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇷🇸](translations/README.sr.md) + + +fork this repository + +Apabila belum memiliki git, [ install segera ](https://help.github.com/articles/set-up-git/). + +## Fork Repositori Ini + +Fork repositori ini dengan cara menekan tombol *fork* yang ada di bagian kanan atas layar. +Hal tersebut akan membuat salinan repositori ini di akun anda. + +## Klon Repositori + +clone this repository + +Sekarang klon repositori ini ke komputer anda. Tekan tombol *clone* lalu tekan ikon "copy to clipboard". + +Buka terminal dan eksekusi perintah git berikut: + +``` +git clone "url yang telah Anda salin" +``` + +yang mana "url yang telah Anda salin" (tanpa tanda petik) adalah url ke repositori ini. Lihat langkah sebelumnya untuk mendapatkan url. + +copy URL to clipboard + +Contoh: + +``` +git clone https://github.com/username-anda/first-contributions.git +``` + +`username-anda` adalah *username* Github Anda. Pada langkah ini, Anda menyalin konten dari repositori first-contributions di GitHub ke komputer anda. + +## Membuat Cabang (Branch) + +Pindah ke direktori repositori Anda yang baru saja disalin (jika belum ada di sana): + +``` +cd first-contributions +``` + +Buat cabang dengan perintah `git checkout`: + +``` +git checkout -b +``` + +Contoh: + +``` +git checkout -b add-alonzo-church +``` + +(Nama cabang tidak perlu mengandung kata _add_ namun layak untuk ditambahkan karena tujuan dari cabang ini adalah menambahkan nama Anda ke dalam sebuah daftar.) + +## Buat Perubahan yang Diperlukan Lalu Commit Perubahan Tersebut + +Buka berkas `Contributors.md` menggunakan teks editor, tambahkan nama Anda ke dalamnya lalu simpan berkas tersebut. Apabila Anda masuk ke direktori dan mengeksekusi perintah `git status` maka Anda dapat melihat bahwa telah ada perubahan. Tambahkan perubahan tersebut ke dalam cabang yang sebelumnya telah dibuat menggunakan perintah `git add`: + +``` +git add Contributors.md +``` + +Simpan perubahan tersebut menggunakan perintah `git commit`: + +``` +git commit -m "Add to Contributors list" +``` + +ganti `` dengan nama anda. + +## Dorong (Push) Perubahan ke GitHub + +Dorong perubahan menggunakan perintah `git push`: + +``` +git push origin +``` + +Ganti `` dengan nama cabang yang sebelumnya telah dibuat. + +## Submit Perubahan untuk Diperiksa + +Jika Anda membuka repositori Anda di GitHub, maka akan ada tombol `Compare & pull request`. Tekan tombol tersebut. + +create a pull request + +Kirimkan *Pull Request* (PR) + +submit pull request + +Segera Saya (pengelola) akan menggabungkan semua perubahan Anda ke cabang utama dari proyek ini. Anda akan mendapatkan email notifikasi setelah perubahan digabungkan. + +## Ke Mana Lagi Setelah dari Sini? + +Selamat! Anda baru saja menyelesaikan *fork* -> klon -> ubah -> alur kerja *Pull Request* yang akan sering Anda temui sebagai kontributor! + +Mari rayakan kontribusi Anda dan bagikan pengalaman tersebut bersama teman-teman dengan pergi ke [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Anda dapat bergabung dengan tim slack kami jika membutuhkan bantuan atau memiliki pertanyaan. [Bergabung dengan tim slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Sekarang, mari mulai berkontribusi di proyek lain. Kami sudah mengumpulkan daftar proyek dengan isu yang mudah dikerjakan sehingga Anda dapat segera memulai. Cek di [daftar proyek web app](https://roshanjossey.github.io/first-contributions/#project-list). + +## [ Materi tambahan ](../additional-material/git_workflow_scenarios/additional-material.md) + +## Tutorial Menggunakan Alat Lain + +| GitHub Desktop | Visual Studio 2017 | GitKraken | VS Code | +| ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [GitHub Desktop](github-desktop-tutorial.md) | [Visual Studio 2017](github-windows-vs2017-tutorial.md) | [GitKraken](gitkraken-tutorial.md) | [Visual Studio Code](github-windows-vs-code-tutorial.md) | +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.igb.md b/translations/README.igb.md new file mode 100644 index 00000000000..88766be814a --- /dev/null +++ b/translations/README.igb.md @@ -0,0 +1,184 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Onyinye Mbụ + +O siri ike. Ọ na-esiri gị ike mgbe mbụ i mere ihe. Karịsịa mgbe ị na-emekọ ihe, imehie ihe abụghị ihe dị mma. Anyị chọrọ ime ka ụzọ ndị ọhụrụ na-emeghe emeghe na-amụta ma tinye aka maka oge mbụ. + +Ịgụ isiokwu & nkuzi ntanetị nwere ike inyere gị aka, ma gịnị dị mma karịa ime ihe ahụ na-eme ihe omume? Ihe oru a bu iji nye nduzi & mee ka ndi mmadu bidoro ibu onyinye mbu. Ọ bụrụ na ị na-achọ ime onyinye mbụ gị, gbasoo nzọụkwụ dị n'okpuru. + +#### *Ọ bụrụ na ị naghị enwe mmasị na akara iwu, [ebe a bụ nkuzi na-eji ngwaọrụ GUI.]( #tutorials-using-other-tools )* + +#### *Gụọ nke a n'asụsụ [ndị ọzọ](translations/Translations.md).* + + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇷🇸](translations/README.sr.md) + + + +fork this repository + +Ọ bụrụ na ịnweghị igwe na igwe gị, [wụnye ya]( https://help.github.com/articles/set-up-git/). + + +## Wepu ebe nchekwa a + +Wepu a repo site na ịpị bọtịnụ mkpịsị aka n'elu nke ibe a. Nke a ga-emepụta otu ntinye nchekwa a na akaụntụ gị. + +## Na-ekpuchi ebe nchekwa + +clone this repository + +Ugbu a, dochie ya repo na igwe gị. Gaa na akaụntụ GitHub gị, meghee repo ahụ maka pịa, pịa bọtịnụ clone ma pịazie ya na akara ngosi akara ngosi. + +Mepee ọnụ ma jikwa iwu na-esonụ: + +``` +git clone "url you just copied" +``` + +ebe "url na ị depụtaghachiri" (na-enweghị ntinye ọnụ) bụ url maka nchekwa ebe a (mgbịrịgwụ nke ọrụ a). Hụ nzọụkwụ ndị gara aga iji nweta url. + +copy URL to clipboard + +Ọmụmaatụ: + +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +ebee `this-is-you` ka aha njirimara GitHub gị. Lee, ị na-edegharị ọdịnaya nke onyinye ntinye mbụ na GitHub na kọmputa gị. + +## Mepụta alaka + +Gbanwee na nhazi ndekọ na kọmputa gị (ọ bụrụ na ịnweghị ebe ahụ): + +``` +cd first-contributions +``` + +Ugbu a, mepụta alaka ụlọ ọrụ site na iji `git checkout` iwu: + +``` +git checkout -b +``` + +Ọmụmaatụ: + +``` +git checkout -b add-alonzo-church +``` + +(Aha alaka ahụ adịghị mkpa iji tinye okwu ahụ n'ime ya, ma ọ bụ ihe dị mkpa ị gụnyere n'ihi na ebumnuche nke alaka a bụ ịgbakwunye aha gị na ndepụta.) + +## Mee mgbanwe ndị dị mkpa ma mee mgbanwe ndị ahụ + + +Ugbu a mepee `Contributors.md` faịlụ na nchịkọta ederede, tinye aha gị na ya. Adakwunye ya na mmalite ma ọ bụ njedebe nke faịlụ ahụ. Tinye ya n'ebe ọ bụla n'etiti. Ugbu a, chekwaa faịlụ ahụ. + +git status + +Ọ bụrụ na ịga na ndekọ ụlọ ọrụ ma mebie iwu ahụ `git status`, ị ga-ahụ na e nwere mgbanwe. + + +Tinye mgbanwe ndị a n'alaka ụlọ ọrụ ị mepụtara site na iji `git add` iwu ahụ: + +``` +git add Contributors.md +``` + +Ugbu a mee mgbanwe ndị ahụ site na iji `git commit` iwu ahụ: + +``` +git commit -m "Add to Contributors list" +``` +dochie `` aha gị. + +## Push mgbanwe na GitHub + + +Mee mgbanwe gị site na iji iwu `git push`: + +``` +git push origin +``` + +dochie `` aha alaka ụlọ ọrụ ị mepụtara n'oge gara aga. + +## Nyefee mgbanwe gị maka nyocha + + +Ọ bụrụ na ị gaa ebe nchekwa gị na GitHub, ị ga-ahụ `Compare & pull request` bọtịnụ. Pịa bọtịnụ ahụ. + +create a pull request + +Ugbu a, rịọ arịrịọ ahụ. + +submit pull request + +N'oge na-adịghị anya, m ga-emeri mgbanwe gị niile n'ime ngalaba alaka ụlọ ọrụ a. Ị ga-enweta ozi ngosi mgbe ọ bụla emetụtara mgbanwe. + +## Ebee ka esi aga ebe a? + +Ekele! Naanị ị gụchara ihe nkesa -> mmepụta oyiri -> dezie -> Bọpụ ọrụ PR nke ị ga-ezute mgbe niile dị ka onye na-enye gị! + +Nalee onyinye gị ma soro ndị enyi gị na ụmụazụ gị kerịta ya site na ịga na [ngwa weebụ](https://roshanjossey.github.io/first-contributions/#social-share). + +Ị nwere ike isonyere ndị ọrụ anyị na-adịghị mma na ikpe ịchọrọ enyemaka ọ bụla ma ọ bụ nwee ajụjụ ọ bụla. [Jikọọ slack otu](https://join.slack.com/t/firstcontr🏴ibutors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Ugbu a, ka anyị malite site na inye onyinye maka ọrụ ndị ọzọ. Anyị ejikọtawo ndepụta nke oru na okwu dị mfe ị nwere ike ịmalite. Lelee [ndepụta nke oru na ngwa weebụ ](https://roshanjossey.github.io/first-contributions/#project-list). + + +### [Ihe ndi ozo](additional-material/git_workflow_scenarios/additional-material.md) + +## Nkuzi na iji ihe ndi ozo + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.it.md b/translations/README.it.md new file mode 100644 index 00000000000..fc48b1a7329 --- /dev/null +++ b/translations/README.it.md @@ -0,0 +1,117 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# La prima collaborazione + +È dura. È sempre difficile fare qualcosa per la prima volta. Specialmente quando si sta collaborando, sbagliare ci mette a disagio. Ma l'open source si basa sulla collaborazione e sul lavorare insieme. Pertanto volevamo semplificare il modo in cui i nuovi collaboratori imparano e contribuiscono per la prima volta a progetti open-source. + +Leggere articoli e guardare tutorial può essere utile, ma cosa c'è di meglio che provare a fare effettivamente le cose sul campo? Questo progetto punta ad essere una guida per i meno esperti. Ricorda: più sei rilassato, meglio imparerai. Se vuoi contribuire per la prima volta, segui i semplici passi elencati qui sotto. Ti promettiamo che sarà divertente. + +fork this repository + +Se non hai git sul tuo computer, [ installalo ]( https://help.github.com/articles/set-up-git/ ). + +## Forka questa repository + +Forka questa repo cliccando sul bottone fork in cima alla pagina. +Questo creeerà una copia di questa repository nel tuo account. + +## Clona la repository + +clone this repository + +Ora clona questa repo nel tuo computer. Clicca sul pulsante per clonare e poi copia l'url. + +Apri il terminale e lancia il seguente comando: + +``` +git clone "url appena copiato" +``` +dove "url appena copiato" (senza le virgolette) è l'url di questa repository. Leggi i passaggi precedenti per ottenere l'url. + +copy URL to clipboard + +Per esempio: +``` +git clone https://github.com/questo-sei-tu/first-contributions.git +``` +dove `questo-sei-tu` è il tuo username GitHub. Qui stai copiando il contenuto della repository da GitHub al tuo computer. + +## Crea un branch + +Entra nella directory della repository (se non lo hai già fatto): + +``` +cd first-contributions +``` +Ora crea un branch usando il comando `git checkout`: +``` +git checkout -b +``` + +Ad esempio: +``` +git checkout -b aggiungi-alonzo-church +``` +(Non è necessario inserire la parola *aggiungi* nel nome del branch, ma in questo caso è ragionevole includerlo poiché lo scopo di questo branch è aggiungere il tuo nome alla lista.) + +## Fai le modifiche necessarie e crea un commit + +Ora apri il file `Contributors.md` in un editor, inserisci il tuo nome e salva il the file. Se vai nella directory del progetto ed esegui il comando `git status`, vedrai quali sono i cambiamenti. Aggiungi le modifiche al branch appena creato usando il comando `git add`: +``` +git add Contributors.md +``` + +Crea ora una commit che includa le modifiche da te fatte, usando `git commit`: +``` +git commit -m "Add to Contributors list" +``` +cambiando `` con il tuo nome. + +## Invia le modifiche a GitHub + +Invia le tue modifiche con il comando `git push`: +``` +git push origin +``` +sostituendo `` con il nome del branch creato prima. + +## Invia i tuoi cambiamenti per una revisione + +Se vai nella tua repository su GitHub, vedrai il pusante `Compare & pull request`. Cliccalo. + +create a pull request + +Ora invia la pull request. + +submit pull request + +Presto avrò incorporato (*merge*) tutti i tuoi cambiamenti nel master branch di questo progetto. Ti arriverà una mail di notifica una volta che le modiche saranno state accettate. + +### [ Prossimi passi ](../additional-material/git_workflow_scenarios/additional-material.md) + +## Tutorial usando altri tool + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +## E ora? + +Potresti anche unirti alla nostra squadra su slack in caso tu abbia bisogno di aiuto o abbia qualche domanda. [Unisciti alla squadra Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Qui sotto puoi trovare delle repo popolari dove cercare issue semplici che potresti risolvere. Continua nelle repo per imparare di più + +|[![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|---|---|---|---|---|---|---|---| +|[exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|[![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[](https://github.com/adobe/brackets/labels/Starter%20bug)| +|[ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[brackets](https://github.com/adobe/brackets/labels/Starter%20bug)| +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)|[](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)| +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) |[Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | diff --git a/translations/README.ja.md b/translations/README.ja.md new file mode 100644 index 00000000000..50068f89e9b --- /dev/null +++ b/translations/README.ja.md @@ -0,0 +1,116 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# First Contributions + +初めてのことは何でも大変なものです。特に他人と協力する時はそうで、間違うのは気持ちの良いことではありません。しかし、オープンソースにおける活動では協力することが全てです。私たちは初めてオープンソースへの貢献を始める人たちが簡単に貢献する方法を学べるようにしたいと考えています。 + +記事を読んだりチュートリアルをやってみることはためになりますが、実際にやってみる方が良いでしょう。このプロジェクトはそのガイダンスを行い、初心者が最初のオープンソースへの貢献を簡単に行えるようにするためのものです。 +覚えておいてください: リラックスしているほどより良く学ぶことができます。もし初めてのオープンソースへの貢献を行いたいのなら以下の簡単なステップに従ってください。それはとても面白いものになるはずです。 + +#### *コマンドラインでの操作に慣れていない場合、[グラフィカルなツールでもチュートリアルを行えます。]( #その他のツールを使用したチュートリアル )* + +fork this repository + +まだGitをインストールしていない場合は、[ここ](https://help.github.com/articles/set-up-git/)からインストールしてください + +## レポジトリをフォーク + +Forkボタンをクリックしてこのレポジトリをフォークしてください。 +この作業はあなたのアカウントにこのレポジトリのコピーを作ります。 + +## レポジトリをクローン + +clone this repository + +次にレポジトリをクローンします。*Clone and download*ボタンをクリックした後に*Copy to clipboard*アイコンをクリックしてください。 + +ターミナルを開いて以下のgitコマンドを実行してください: + +``` +git clone "コピーしたURL" +``` +"コピーしたURL" (ダブルクオーテーションは除いてください) は先ほどコピーしたレポジトリのURLと置き換えてください。 + +copy URL to clipboard + +例: +``` +git clone https://github.com/<あなたのユーザー名>/first-contributions.git +``` +`あなたのユーザー名` はご自身のGitHubユーザー名に置き換えてください。この作業でGitHub のリポジトリの内容はあなたのコンピュータにコピーされました。 + +## ブランチを作成 + +もしレポジトリのディレクトリにいなければそこまで移動してください。 + +``` +cd first-contributions +``` +`git checkout` コマンドを使用してブランチを作成します: +``` +git checkout -b +``` + +例: +``` +git checkout -b add-alonzo-church +``` +(ブランチの名前には必ずしも*add*が含まれていなければならないわけではありませんが、このブランチの目的があなたの名前をリストに加えることであることを考慮すれば含むのが適切です。) + +## コードを変更してその変更をコミット + +テキストエディタで`Contributors.md`ファイルを開いてあなたの名前を追加してください。だたし、ファイルの始めや終わりにあなたの名前をつけないようにしましょう。名前リストの間のどこか好きな場所に、あなたの名前を追加するようにしましょう。あなたの名前をファイルに加えたら、ファイルを保存します。 + +git status + +プロジェクトディレクトリに移動して`git status`を実行すると、変更がなされたことが確認できると思います。`git add`コマンドを使ってそれらの変更を適用してください。 +``` +git add Contributors.md +``` + +次に`git commit`コマンドを使ってこれらの変更をコミットします。 +``` +git commit -m "Add <あなたの名前> to Contributors list" +``` +`<あなたの名前>`をご自身の名前に置き換えてください。 + +## GitHubに変更をpushする + +`git push`コマンドを使って変更をpushしてください。 +``` +git push origin <ブランチ名> +``` +`<ブランチ名>`には先ほど作成したブランチ名を入れてください。 + +## レビューのためにプルリクエストを送る + +GitHub上であなたのリポジトリに行くと、`Compare & pull request`ボタンが表示されます。そのボタンをクリックしてください。 + +create a pull request + +プルリクエストを作ってください: + +submit pull request + +すぐに私が加えられた変更をmasterブランチにマージします。マージが終了した際にはその旨のメールが送られます。 + +## 次に何をするべきか + +おめでとうございます! コントリビューターとして重要な _フォーク -> クローン -> 編集 -> プルリクエスト_ の基本的なワークフローが完了しました。 + +初のオープンソースへの貢献を祝って友達やフォロワーにそのことを[このウェブアプリ](https://roshanjossey.github.io/first-contributions/#social-share)を使ってシェアしましょう。 + +もし何かしら質問があるようでしたら[私たちのSlack team](https://firstcontributors.slack.com/join/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY)に入ってください。 + +他のプロジェクトへの貢献を始めましょう。簡単なイシューが立てられているプロジェクトのリストを作りました。ウェブアプリで[プロジェクトリスト](https://roshanjossey.github.io/first-contributions/#project-list)を確認て見てください。 + +### [追加リソース](../additional-material/git_workflow_scenarios/additional-material.md) + +## その他のツールを使用したチュートリアル +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)|[Visual Studio Code](../github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](../sourcetree-macos-tutorial.md)| + diff --git a/translations/README.ko.md b/translations/README.ko.md new file mode 100644 index 00000000000..5172095a8ba --- /dev/null +++ b/translations/README.ko.md @@ -0,0 +1,143 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# 첫 기여 + + +어렵습니다. 처음으로 뭔가를 하는 것은 언제나 어렵습니다. 특히 공동 작업을 할 때 실수를 하기라도 하면 마음이 편치 않습니다. 그러나 협업과 협력은 오픈 소스의 전부입니다. 우리는 새로운 오픈 소스 기여자가 처음 배우고 기여하는 방식을 단순화하고자 했습니다. + +관련된 글을 읽거나 튜토리얼을 보는 것이 도움이 될 수 있습니다. 하지만 연습삼아 직접 시도해보는 것보다 나을 수는 없을 겁니다. 이 프로젝트는 초보자가 처음으로 기여하는 방법을 안내하고 단순화하는 것을 목표로 합니다. 기억하십시오: 편안하게 임할수록 더 잘 배울 수 있습니다. 첫 번째 기여를 하려면 그저 아래의 간단한 단계를 따르면 됩니다. + +이 저장소 포크하기 + +지금 Git이 없으면 [설치](https://help.github.com/articles/set-up-git/)하세요. + +## 저장소 포크하기 + +이 페이지의 위에 있는 포크 버튼을 클릭하여 이 저장소를 포크하세요. 당신의 계정에 이 저장소의 복제본이 생성될 겁니다. + +## 저장소 복제하기 + +이 저장소 복제하기 + +이제 이 저장소를 자신의 기기에 복제합니다. 복제 버튼을 클릭하고 클립보드로 복사 아이콘을 클릭합니다. + +터미널을 열고 다음 Git 명령을 실행합니다: + +``` +git clone "방금 복사한 주소" +``` + +(따옴표를 제외한) "방금 복사한 주소"는 이 저장소의 주소입니다. 주소를 얻으려면 이전 단계를 참조하세요. + +URL 을 클립보드로 복사 + +예시: + +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +`this-is-you`는 당신의 깃허브 계정입니다. 여기서 깃허브에 있는 +first-contributions 저장소의 내용을 컴퓨터에 복사합니다. + +## 브랜치 생성하기 + +아직 저장소 디렉토리에 있지 않다면 그곳으로 이동합니다. + +``` +cd first-contributions +``` + +이제 `git checkout` 명령을 사용하여 브랜치를 생성합니다. + +``` +git checkout -b +``` + +예시: + +``` +git checkout -b add-alonzo-church +``` + +(브랜치의 이름에 꼭 *add*가 들어가지 않아도 됩니다. 하지만 이 브랜치의 목적은 당신의 이름을 리스트에 추가하는 것이기 때문에 이름에 *add*를 포함하는 것이 타당합니다.) + +## 필요한 변경사항을 작성하고 커밋하기 + +이제 텍스트 편집기에서 `Contributors.md` 파일을 엽니다. 당신은 분명 가벼운 마크업 언어인 Markdown에 익숙할 겁니다. +Markdown을 어떻게 사용하는지는 이 [치트시트](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)를 참조하세요. + +이 경우에는 다음을 `Contributors.md`의 마지막에 추가하세요: + +``` +-[Your-name](https://github.com/Your-username) +``` + +예시: + +``` +-[John Doe](https://github.com/johndoe) +``` + +`](` 사이에 스페이스가 없다는 것에 주의하십시오. 파일을 저장하고 종료하십시오. + +프로젝트 디렉터리에서 `git status` 명령을 실행하면 변경사항을 볼 수 있습니다. 변경사항을 아래 `git add` 명령으로 추가합니다. + +``` +git add Contributors.md +``` + +이제 아래 `git commit` 명령으로 변경사항을 커밋합니다. + +``` +git commit -m "Add to Contributors list" +``` + +``을 당신의 이름으로 바꾸세요. + +## 변경사항을 깃허브에 푸시하기 + +`git push` 명령으로 변경사항을 푸시합니다. + +``` +git push origin +``` + +``을 이전에 생성한 브랜치 이름으로 바꾸세요. + +## 검토를 위해 변경사항을 제출하기 + +깃허브의 당신의 저장소에 가면, `Compare & pull request` 버튼을 볼 수 있습니다. 그 버튼을 클릭하세요. + +풀 요청
+생성하기 + +이제 풀 요청을 제출합니다. + +풀 요청 제출하기 + +이제 여러분의 변경사항을 제가 확인 후에 마스터 브랜치에 머지 하게 되면 알림 메일을 받으실 수 있습니다. + +## 이제 무엇을 하나요? + +여러분의 첫 기여를 축하합니다. 이제 [웹 앱](https://roshanjossey.github.io/first-contributions/#social-share)으로 이동하여 친구 및 팔로워와 공유하십시오. + +도움이 필요하거나 질문이 있을 경우, 우리의 slack 팀에 합류할 수 있습니다. [slack 팀 가입하기](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +이제 다른 프로젝트에 기여해보십시오. 시작하기 쉬운 문제가 있는 프로젝트 목록을 작성했습니다. [웹 앱에 있는 프로젝트 목록](https://roshanjossey.github.io/first-contributions/#project-list)을 확인하세요. + + + +### [추가 정보](../additional-material/translations/additional-material.ko.md) + +## 다른 도구를 이용하는 튜토리얼 + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.kws.md b/translations/README.kws.md new file mode 100644 index 00000000000..8e4f65fe6a9 --- /dev/null +++ b/translations/README.kws.md @@ -0,0 +1,183 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + + +# Mchango wa Kwanza + + +Ni vigumu. Ni vigumu daima mara ya kwanza unafanya kitu. Hasa wakati unashirikiana, kufanya makosa sio jambo la kushangaza. Tulitaka kurahisisha njia mpya ya wafadhili wa kujifunza na kuchangia kwa mara ya kwanza. + +Kusoma makala na mafunzo ya kutazama yanaweza kusaidia, lakini ni nini bora zaidi kuliko kufanya mambo halisi katika mazingira ya mazoezi? Mradi huu unalenga kutoa mwongozo na kurahisisha wasanidi wa njia kufanya mchango wao wa kwanza. Ikiwa unatafuta kufanya mchango wako wa kwanza, fuata hatua zifuatazo. + +#### *Ikiwa huna urahisi na mstari wa amri, [hapa ni mafunzo kwa kutumia zana za GUI.]( #tutorials-using-other-tools )* + +#### *Soma hii kwa [lugha zingine](translations/Translations.md).* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇷🇸](translations/README.sr.md) + + + + +fork this repository + + +## Futa hifadhi hii + +Futa repo hii kwa kubonyeza kifungo cha fakia juu ya ukurasa huu. Hii itaunda nakala ya hifadhi hii katika akaunti yako. + +## Weka chumba + +clone this repository + +Sasa fungia repo iliyofungwa kwa mashine yako. Nenda kwenye akaunti yako ya GitHub, kufungua repo iliyofungwa, bonyeza kitufe cha kamba na kisha bofya nakala kwenye clipboardboard . + + +Fungua terminal na uendesha amri yafuatayo yafuatayo: + +``` +git clone "url you just copied" +``` + +ambapo "url ulikosa tu" (bila alama za kupiga kura) ni url kwenye hifadhi hii (fomu yako ya mradi huu). Angalia hatua za awali ili kupata url. + +copy URL to clipboard + +Kwa mfano: + +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +wapi `this-is-you` jina lako la mtumiaji GitHub. Hapa unakili nakala ya maudhui ya kwanza ya michango kwenye GitHub kwenye kompyuta yako. + +## Unda tawi + +Badilisha kwenye saraka ya uhifadhi kwenye kompyuta yako (ikiwa huko tayari): + +``` +cd first-contributions +``` + +Sasa uunda tawi kwa kutumia git `checkout` amri: + + +``` +git checkout -b +``` + +Kwa mfano: + +``` +git checkout -b add-alonzo-church +``` + +(Jina la tawi haina haja ya kuwa neno liongeze ndani yake, lakini ni jambo la kuzingatia kwa sababu lengo la tawi hili ni kuongeza jina lako kwenye orodha.) + +## Fanya mabadiliko muhimu na ufanyie mabadiliko hayo + +Sasa fungua `Contributors.md` faili katika mhariri wa maandishi, uongeze jina lako. Usiongeze kwenye mwanzo au mwisho wa faili. Weka mahali popote katikati. Sasa, sahau faili. + +git status + +Ikiwa unakwenda kwenye saraka ya mradi na kutekeleza amri `git status`, utaona kuna mabadiliko. + + +Ongeza mabadiliko hayo kwenye tawi ulilojenga kwa kutumia `git add` amri: + +``` +git add Contributors.md +``` + +Sasa fanya mabadiliko hayo kwa kutumia amri `git commit`: + +``` +git push origin +``` + +kubadilisha `` jina lako. + +## Skuma mabadiliko kwenye GitHub + +Skuma mabadiliko yako kwa kutumia amri `git push`: + +``` +git push origin +``` + +kubadilisha `` na jina la tawi uliloumba hapo awali. + +## Tuma mabadiliko yako kwa ukaguzi + +Ikiwa unaenda kwenye hifadhi yako kwenye GitHub, utaona `Compare & pull request` kifungo. Bofya kwenye kifungo hicho. + +create a pull request + +Sasa weka ombi la kuvuta. + +submit pull request + +Hivi karibuni nitakuwa kuunganisha mabadiliko yako yote kwenye tawi la mradi huu. Utapata barua pepe ya arifa mara mabadiliko yameunganishwa. + +## Wapi kutoka hapa? + +Hongera! Wewe umekamilisha fomu ya kawaida -> clone -> hariri -> PRflowflow ambayo unakutana mara nyingi kama mchangiaji! + +Sherehe mchango wako na uwashiriki na marafiki zako na wafuasi kwa kwenda kwenye [programu ya wavuti](https://roshanjossey.github.io/first-contributions/#social-share). + +Unaweza kujiunga na timu yetu ya slack ikiwa unahitaji msaada wowote au una maswali yoyote. [Jiunge na timu ya slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Sasa hebu tuanze uanze na kuchangia kwenye miradi mingine. Tumeandika orodha ya miradi na masuala rahisi unaweza kuanza. Angalia [orodha ya miradi katika programu ya wavuti](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Nyenzo za ziada](additional-material/git_workflow_scenarios/additional-material.md) + +## Mafundisho Kutumia Zana Zingine + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.kz.md b/translations/README.kz.md new file mode 100644 index 00000000000..2a7fabcce26 --- /dev/null +++ b/translations/README.kz.md @@ -0,0 +1,109 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Жобаға алғашқы үлес қосу + +Бұл қиын. Бірдеңе істегенде бірінші кезекте әрқашан қиын. Қателіктер жасау өте жағымсыз, әсіресе командада жұмыс істесеңіз. Барлық open source проекттер ынтымақтастық пен бірегей жұмыстан тұрады. Біз бастаушы әзірлеушілер үшін оқыту мен бірлесіп жұмыс істеудегі алғашқы қадамдарды жеңілдеткіміз келеді. + +Оқулықтарды және мақалаларды оқуға әрқашан болады, бірақ іс жүзінде тәжірибе ортасында жұмыс жасаудан гөрі не жақсы? Бұл жобаның мақсаты - жастарды дұрыс жолға қою, сондай-ақ оларға алғашқы үлес қосуға мүмкіндік беру. Егер сіз өзіңіздің алғашқы үлесіңізді жасау мүмкіндігін іздесеңіз, төмендегі қарапайым қадамдарды орындаңыз. Біз уәде етеміз, бұл қызықты болады. + +fork this repository + + +Егерде сіздің компьютеріңізде git қосылмаған болса, [ оны қосыңыз ]( https://help.github.com/articles/set-up-git/ ) + +## Тармақты (fork) жасаңыз + +Өзіңіздің тармағыңызды жасау үшін, беттің үстіңгі жағындағы `fork` түймесін басыңыз. Осылай сіз осы репозиторийдің өзіңіздің аккаутыңызда копиясын жасайсыз. + +## Репозиторийді клондаңыз + +clone this repository + +Енді бұл репозиторийді өз дербес компьютеріңізге клодаңыз. Сілтемені көшіру үшін `clone` батырмасын басыңыз, содан кейін `copy to clipboard` белгішесіне басыңыз. + +Терминалды ашып, келесі git пәрмендіні іске қосыңыз: + +``` +git clone "url you just copied" +``` +Бұл жерде "url you just copied" (тырнақшасыз) сіздің репозиторийңізге сілтеме. Бұл сілтемені алу үшін алдыңғы қадамдарды қараңыз. + +copy URL to clipboard + +Мысалы: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +Бұл жерде `this-is-you` сіздің github-тағы логин. Осылайша GitHub-тан сіздің компьютеріңізге 'first-contributions' репозиторийін көшіресіз. + +## Тармақ жасаңыз + +Егер сіз әлі сол жерде жоқ болсаңыз, компьютердегі репозиторий каталогына өтіңіз. + +``` +cd first-contributions +``` +Енді `git checkout` команданың көмегімен тармақты құрыңыз. + +``` +git checkout -b +``` + +Мысалы: +``` +git checkout -b add-alonzo-church +``` +(Синтаксистік түрде тармақта *add* сөзі болуы қажет емес, бірақ ол осы тармақтың мақсатына баса назар аударғандықтан негізделеді - атыңызды тізімге қосу.) + +## Керек өзгерістерді жасаңыз да, коммит істеңіз + +Енді мәтіндік редакторда `Contributors.md` файлын ашыңыз, атыңызды енгізіңіз және файлды сақтаңыз. Егер сіз жобалық каталогқа барып, `git status` орындасаңыз, өзгертулерді көресіз. Бұл өзгертулерді `git add` командасымен қосыңыз. + +``` +git add Contributors.md +``` + +Енді бұл өзгерістерды `git commit` командасымен коммиттаңыз. + +``` +git commit -m "Add to Contributors list" +``` +`` өзіңіздің атыңызға ауыстырыңыз + +## Өзгерістерді github'қа пуштаңыз + +Өзгерістерді `git push` командасымен пуштаңыз +``` +git push origin +``` +`` дегенді бұрын құрылған тармақ атына өзгертіңіз. + +## Өзгерістерді ревью үшін растаңыз + +Егер сіз GitHub-тағы репозиторийге кірсеңіз, `Compare & pull request` батырмасын көресіз. Оны басыңыз. + +create a pull request + +Енді пулл-реквестті растаңыз. + +submit pull request + +Көп ұзамай мен осы жобаның негізгі бөлімімен барлық өзгерістерді біріктіремін. Өзгерістер қабылданған кезде (мердж жасалғанда) электрондық хат аласыз. + +## Ары қарай не? + +Төменде сіз жаңадан келген тапсырмаларды таба алатын бірнеше танымал репозиторийлер бар. Қосымша ақпарат алу үшін репозиторийге барыңыз. + +| [![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22) | [![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22) | [![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie) | [](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22) | [![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22) | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22) | [Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22) | [habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie) | [numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22) | [elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22) | +| [![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) | [![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy) | [![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22) | [![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy) | [![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs) | [![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer) | [![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs) | +| [homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) | [Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy) | [vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22) | [Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy) | [OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs) | [coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer) | [moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs) | +| [![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22) | [![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22) | [![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) | [![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level) | [![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [](https://github.com/adobe/brackets/labels/Starter%20bug) | +| [ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22) | [freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22) | [hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) | [neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level) | [babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [brackets](https://github.com/adobe/brackets/labels/Starter%20bug) | +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | [](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | [Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | + diff --git a/translations/README.lt.md b/translations/README.lt.md new file mode 100644 index 00000000000..2cfb80dfbe9 --- /dev/null +++ b/translations/README.lt.md @@ -0,0 +1,110 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Pirmieji įnašai + +Sunku. Visada sunku ką nors padaryti pirmą kartą. Ypač bendradarbiaujant, klaidų darymas nėra malonus dalykas. Tačiau atviras kodas - tai bendravimas ir bendradarbiavimas. Mes norime paprasčiau paaiškinti naujiesiems atvirojo kodo kūrėjams, kaip jie gali prisidėti pirmą kartą. + +Galite pradėti skaityti straipsnius ir žiūrėti vadovus, bet kas gali būti geriau nei mokymasis darant be klaidų pirmą kartą? Šio projekto tikslas - suteikti patarimus ir supaprastinti tai, kaip naujokai daro pirmąjį indėlį. Prisiminkite: kuo labiau esate atsipalaidavęs, tuo geriau mokotės. Jei norite atlikti pirmąjį indėlį, atlikite toliau pateiktus paprastus veiksmus. Mes pažadame, tai bus smagu. + +fork this repository + +Jei neturite instaliuoto git, [ instaliuokite čia ]( https://help.github.com/articles/set-up-git/). + +## Kopijuokite (fork) šią saugyklą + +Kopijuokite saugyklą paspausdami šaknies simbolio mygtuką šio puslapio viršuje. +Tai sukurs šios saugyklos kopiją jūsų GitHub paskyroje. + +## Klonuokite saugyklą + +clone this repository + +Dabar klonuokite šią saugyklą į savo kompiuterį. Spustelėkite klonavimo mygtuką ir tada spustelėkite *copy to clipboard* piktogramą. + +Atidarykite terminalą ir paleiskite šią git komandą: + +``` +git clone "kopijuota nuoroda" +``` +kur "kopijuota nuoroda" (be citatos ženklų) yra url nuoroda jūsų saugyklai. Peržiūrėkite ankstesnius veiksmus, kad gautumėte url nuorodą. + +copy URL to clipboard + +Pavyzdžiui: +``` +git clone https://github.com/tai-jus/first-contributions.git +``` +kur `tai-jus` yra jūsų GitHub paskyros vartotojo vardas. Čia jūs kopijuojate first-contributions saugyklos turinį į "GitHub" aplanką savo kompiuteryje. + +## Sukurkite šaką (branch) + +Pakeiskite kompiuterio saugyklos katalogą (jei dar to nepadarėte anksčiau): + +``` +cd first-contributions +``` +Dabar sukurkite šaką naudodami komandą `git checkout`: +``` +git checkout -b +``` + +Pavyzdžiui: +``` +git checkout -b add-vardenis-pavardenis +``` +(Saugyklos pavadinime neturi būti žodžio *add*, bet tai yra reikalinga, kadangi šios šakos (branch) paskirtis yra įtraukti savo vardą į sąrašą.) + +## Atlikite reikiamus pakeitimus ir pridėkite (commit) šiuos pakeitimus + +Dabar atidarykite failą `Contributors.md` teksto redaktoriuje, pridėkite prie jo savo vardą ir išsaugokite failą. Jei eisite į projekto katalogą ir paleisite komandą `git status`, pamatysite, kad yra pakeitimų. Pridėkite šiuos pakeitimus į ką tik sukurtą šaką (branch) komandos `git add` pagalba: +``` +git add Contributors.md +``` + +Dabar atlikite šiuos pakeitimus naudodami komandą `git commit`: +``` +git commit -m "Add to Contributors list" +``` +pakeisdami `` savo vardu. + +## Išsiųskite pakeitimus į GitHub + +Išsiųskite pakeitimus komanda `git push`: +``` +git push origin +``` +pakeisdami `` anskčiau sukurtos šakos (branch) vardu. + +## Pateikite pakeitimus peržiūrai + +Eikite į savo saugyklą GitHub. Pamatysite mygtuką `Compare & pull request` (palyginti ir įtraukti užklausą). Spustelėkite šį mygtuką. + +create a pull request + +Dabar pateikite įtraukimo į pradinę saugyklą (pull) užklausą. + +submit pull request + +Netrukus projekto autorius sujungs visus jūsų šakos pakeitimus su šio projekto pagrindine šaka. Kai pakeitimai bus sujungti, gausite tai patvirtinantį el. laišką. + +## Kas toliau? + +Džiaukitės ir atkreipkite dėmesį į savo įnašą pasidalindami šia žinia su draugais [interneto aplikacijoje](https://roshanjossey.github.io/first-contributions/#social-share). + +Prisijunkite prie mūsų "slack" komandos, jei jums reikia pagalbos ar turite klausimų. [Prisijungti prie slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Pradėkite tobulinti kitus projektus. Mes sukūrėme projektų sąrašą, kuriuose yra lengvai išsprendžiamų problemų. Peržiūrėkite [projektų sąrašą interneto aplikacijoje](https://roshanjossey.github.io/first-contributions/#project-list). + +### [ Papildoma medžiaga ](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Pamokos naudojant kitus įrankius + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.lv.md b/translations/README.lv.md new file mode 100644 index 00000000000..d5c2da234a2 --- /dev/null +++ b/translations/README.lv.md @@ -0,0 +1,123 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Pirmais devums + +Kaut ko paveikt pirmo reizi vienmēr ir grūti. Turklāt pieļaut kļūdas, jo īpaši līdzdarbojoties ar citiem, nav patīkami. Mēs vēlamies vienkāršot veidu, kā jauni atvērtā koda līdzautori mācās un pievieno savu devumu pirmo reizi. + +Rakstu lasīšana un pamācību skatīšanās var palīdzēt, tomēr nekas nav labāks par īstu darbību mācību vidē. Šī projekta mērķis ir sniegt norādījumus un vienkāršot veidu, kā iesācēji pievieno savu pirmo devumu. Ja tu vēlies līdzdarboties, seko turpmāk norādītajiem soļiem. + +#### *Ja tu nejūties ērti ar komandrindu, [izmanto GUI rīku pamācības.]( #pamācības-citiem-rīkiem )* + + +fork this repository + +Ja tavā datorā nav git, [uzinstalē to]( https://help.github.com/articles/set-up-git/). + +## Izveido repozitorija atzarojumu + +Izveido savu repozitorija atzarojumu, nospiežot *fork* pogu šīs lapas augšpusē. +Tādējādi tavā profilā tiks izveidota šī repozitorija kopija. + +## Klonē repozitoriju + +clone this repository + +Tagad klonē nokopēto repozitoriju savā datorā. Ej uz savu GitHub profilu, atver nokopēto repozitoriju, nospied *clone* pogu un tad nospied uz *copy to clipboard* ikonas. + +Atver termināli un palaid šo git komandu: + +``` +git clone "tikko nokopētā saite" +``` +kur "tikko nokopētā saite" (bez pēdiņām) ir url uz šo repozitoriju (tavs projekta atzarojums). Apskaties iepriekšējos soļos, kā dabūt url. + +copy URL to clipboard + +Piemēram: +``` +git clone https://github.com/tavs-vārds/first-contributions.git +``` +kur `tavs-vārds` ir tavs GitHub lietotājvārds. Šādi tu kopē GitHub repozitorija *first-contributions* saturu savā datorā. + +## Izveido zaru + +Savā datorā nomaini repozitorija direktoriju (ja tu vēl neatrodies tajā): + +``` +cd first-contributions +``` +Tagad izveido zaru ar `git checkout` komandu: +``` +git checkout -b +``` + +Piemēram: +``` +git checkout -b add-alonzo-church +``` +(Zara nosaukumā nav obligāti jābūt vārdam *add*, bet būtu lietderīgi to iekļaut, jo šī zara mērķis ir tava vārda pievienošana sarakstam.) + +## Veic nepieciešamās izmaiņas un iesūti tās + +Tagad atver `Contributors.md` failu teksta redaktorā un pievieno tam savu vārdu. Nepievieno to faila sākumā vai beigās, bet ievieto to kaut kur pa vidu. Pēc tam saglabā failu. + +git status + + +Ja tu dosies uz projekta direktoriju un izpildīsi komandu `git status`, tu redzēsi, ka tajā ir izmaiņas. + + +Pievieno šīs izmaiņas zaram, kuru tu tikko izveidoji, ar `git add` komandu: + +``` +git add Contributors.md +``` + +Tagad iesūti šīs izmaiņas ar `git commit` komandu: +``` +git commit -m "Add to Contributors list" +``` +aizvietojot `` ar savu vārdu. + +## Pievieno izmaiņas GitHub + +Pievieno savas izmaiņas ar komandu `git push`: +``` +git push origin +``` +aizvietojot `` ar zara, kuru tu iepriekš izveidoji, nosaukumu. + +## Iesniedz izmaiņas pārskatīšanai + +Ja tu dosies uz savu GitHub repozitoriju, tu redzēsi `Compare & pull request` pogu. Nospied to. + +create a pull request + +Tagad iesniedz pievienotās izmaiņas. + +submit pull request + +Jau pavisam drīz es pievienošu visas tavas izmaiņas šī projekta galvenajam (master) zaram. Tu saņemsi paziņojumu e-pastā, tiklīdz izmaiņas būs pievienotas. + +## Un ko tagad? + +Apsveicam! Tu tikko pabeidzi standarta _fork -> clone -> edit -> PR_ darbplūsmu, ar kuru turpmāk bieži nāksies sastapties kā līdzautoram. + +Pastāsti par savu devumu saviem draugiem un sekotājiem, izmantojot [mūsu vietni](https://firstcontributions.github.io/#social-share). + +Tu vari pievienoties arī mūsu slack komandai, ja tev nepieciešama palīdzība vai ir kādi jautājumi. [Pievienojies slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + +Tagad tu vari līdzdarboties arī citos projektos. Mēs esam sastādījuši sarakstu ar projektiem, kuros ir vienkāršas problēmas, ar kurām tu varētu sākt. Izpēti [projektu sarakstu mūsu vietnē](https://firstcontributions.github.io/#project-list). + +### [Papildu materiāli](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Pamācības citiem rīkiem + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| diff --git a/translations/README.mk.md b/translations/README.mk.md new file mode 100644 index 00000000000..67452973359 --- /dev/null +++ b/translations/README.mk.md @@ -0,0 +1,180 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Први чекори + +Тешко е. Секогаш е тешко кога нешто се прави за прв пат. Кога соработуваме со други луѓе, правењето грешки е непријатно. Затоа сакавме да го поедноставиме начинот на кој новите соработници на отворен код учат и допринесуват за прв пат. + +Читањето на статии и гледањето на видеа помага до некаде, но нема подобар начин за учење од вежбањето. Целта на овој проект е да се обезбеди вежба и да се поедностави начинот по кој почетниците допринесуват отворен код. Ако сакате да го направите својот прв придонес, тогаш следете ги долунаведените чекори. + +#### *Ако не сакате да користите command line (терминал), [овде имате упатстња за GUI]( #tutorials-using-other-tools )* + +#### *Можете да ја прочитате оваа статија на [други јазици](translations/Translations.md).* + +[:bangladesh:](translations/README.bn.md) +[🇧🇬](translations/README.bg.md) +[🇧🇷](translations/README.pt_br.md) +[](translations/README.ca.md) +[🇨🇳](translations/README.chs.md) +[🇨🇿](translations/README.cs.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇪🇬](translations/README.eg.md) +[🇪🇸](translations/README.es.md) +[🇫🇷](translations/README.fr.md) +[🏴](translations/README.gl.md) +[🇬🇷](translations/README.gr.md) +[🇭🇺](translations/README.hu.md) +[🇮🇩](translations/README.id.md) +[🇮🇱](translations/README.hb.md) +[🇮🇳](translations/Translations.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇮🇹](translations/README.it.md) +[🇯🇵](translations/README.ja.md) +[🇰🇪](translations/README.kws.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇱🇹](translations/README.lt.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇲🇽](translations/README.mx.md) +[🇲🇾](translations/README.my.md) +[🇳🇱](translations/README.nl.md) +[🇳🇬](translations/README.igb.md) +[🇳🇵](translations/README.np.md) +[🇵🇭](translations/README.tl.md) +[](translations/README.en-pirate.md) +[🇵🇰](translations/README.ur.md) +[🇵🇱](translations/README.pl.md) +[🇵🇹](translations/README.pt-pt.md) +[🇷🇺](translations/README.ru.md) +[🇸🇦](translations/README.ar.md) +[🇸🇪](translations/README.se.md) +[:slovakia:](translations/README.slk.md) +[:slovenia:](translations/README.sl.md) +[🇹🇭](translations/README.th.md) +[🇹🇷](translations/README.tr.md) +[🇹🇼](translations/README.cht.md) +[🇺🇦](translations/README.ua.md) +[🇻🇳](translations/README.vn.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇱🇻](translations/README.lv.md) +[GUJ](translations/README.guj.md) + + + +fork this repository + +Ако немате git на вашиот компјутер, [инсталирајте го]( https://help.github.com/articles/set-up-git/). + +## Направете Разгранување (Fork) на ова складиште (repository) + +Направете разгранување на складиштето со натискање на копчето "Fork" кое се наоѓа на горниот дел на оваа страница. +Вака ќе направите копија на складиштето во вашиот GitHub профил. + +## Клонирајте го овоа складиште + +clone this repository + +Сега треба да го клонирате складиштето во вашиот компјутер. Отидете во вашиот GitHub профил, отворете го разгранетото складиште, +кликнете на копчето "Clone" и копирајте го линкот. Исто така може да натиснете на иконата за копирање (Copy to clipboard) + +Отворете го терминалот и воведете ја следната команда: + +``` +git clone "линкот кој го копиравте" +``` +На местото на "линкот кој го копиравте" (без наводници) поставете го линкот на складиштето (Вашето Разгранување на овој проект). Погледнете ги претходните чекори за да видете како да го добиете линкот. + +copy URL to clipboard + +На пример: +``` +git clone https://github.com/vashiot-username/first-contributions.git +``` +со преименување на `vashiot-username` во вашето потребителско име. Во овој чекор правите копија на складиштето first-contributions от GitHub кон вашиот компјутер. + +## Создавање на гранка (branch) + +Променете ја локацијата на складиштето во вашиот компјутер (Ако сеуште не сте ја промениле): + +``` +cd first-contributions +``` +Сега создајте гранка со помош на командата `git checkout`: +``` +git checkout -b +``` + +На пример: +``` +git checkout -b add-alonzo-church +``` +(Името на гранката не мора да го содржи зборот *add*, но се препорачува, затоа што целта на оваа гранка е да го додадете вашето име во списокот.) + +## Направете ги потребните промени и извршете (commit) ги + +Сега отворете го фајлот `Contributors.md` во уредник за текст и додадете го вашето име. Не додавајте го на почетокот или крајот на фајлот. Поставете го некаде на средината. Зачувајте ги промените. + +git status + + +Ако ја извршете командата `git status` во директоријата на складиштето, ќе забележите дека има промени. + + +Зачувајте ги промените на создадената гранката со помош на командата `git add`: + +``` +git add Contributors.md +``` + +Сега извршете ги промените со командата `git commit`: +``` +git commit -m "Add to Contributors list" +``` +со промена на `` со вашето име. + +## Поставете (Push) ги промените во GitHub + +Поставете ги вашите промени со командата `git push`: +``` +git push origin +``` +со промена на `` во името на вашата гранка, која ја создадовте претходно. + +## Поднесете ги вашите промени за преглед. + +Ако отидете во вашето складиште во GitHub, ќе го забележите копчето `Compare & pull request`. Натиснете го. + +create a pull request + +Сега поднесете ги вашите промени за преглед. + +submit pull request + +Наскоро ќе ги спојам (merge) сите ваши промени во главната гранка (мастер branch) на овој проект. Ќе бидете изњестени по пат на електрона пошта за спојот на вашите промени. + +## Што е следно? + +Честитки! Само што ги завршивте _fork -> clone -> edit -> PR_ операции, со кои ќе се соочувате често како соработник! + +Прославете ги вашите придонеси и споделете ги со пријатели и следители со посета на [веб-апликацијата](https://roshanjossey.github.io/first-contributions/#social-share). + +Можете да станете дел од нашиот slack team ако ви треба помош или имате прашања [Стани дел](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Сега е време да започнете да допринесувате кон други проекти. Ние имаме создадено список со лесни проекти за да започнете. [Види ја листата](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Дополнителен материал](additional-material/git_workflow_scenarios/additional-material.md) + + +## Вежби за користење на други програми + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.ml.md b/translations/README.ml.md new file mode 100644 index 00000000000..db4656fa57d --- /dev/null +++ b/translations/README.ml.md @@ -0,0 +1,131 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# ആദ്യ സംഭാവനകൾ (First Contributions) + +ആദ്യമായി ഒരു കാര്യം ചെയ്യുക എന്നുള്ളത് വളരെ ബുദ്ധിമുട്ടാണ്. പ്രത്യേകിച്ച്, മറ്റു പലരുടെയും ഒപ്പം ജോലി ചെയ്യുമ്പോൾ തെറ്റ് വരുന്നത് അത്ര സുഖകരമായ കാര്യം അല്ല. സ്വതന്ത്ര സോഫ്റ്റ്‌വെയറിലേക്ക് ആദ്യമായി സംഭാവന ചെയ്യുന്നവർക്കു അതിനെ പറ്റി പഠിക്കാനും പങ്കാളി ആകുവാനും വേണ്ടി കുറച്ച്‌ കൂടെ എളുപ്പമായ എന്തെങ്കിലും ഉണ്ടാക്കണണമെന്നായിരുന്നു ഞങ്ങളുടെ ആഗ്രഹം. + +ലേഖനങ്ങൾ വായിക്കുന്നതും വീഡിയോ കാണുന്നതും ഒക്കെ സഹായകമാണ്. പക്ഷേ ചെയ്തു തന്നെ പഠിക്കുന്നതല്ലേ ഏറ്റവും നല്ലത്? ഈ പ്രൊജക്റ്റ് ഒരു ഇതിനെ പറ്റി പരിചയം ഇല്ലാത്ത ഒരാൾക്ക് ആദ്യത്തെ സംഭാവന നല്കാൻ ഉള്ള ഒരു വഴികാട്ടി ആണ്. നിങ്ങളും നിങ്ങളുടെ ആദ്യ സംഭാവന നൽകാൻ ആഗ്രഹിക്കുന്നു എങ്കിൽ താഴെ പറയുന്ന പോലെ ചെയ്യുക. + +#### *താങ്കൾക്ക് കമാൻഡ് ലൈൻ ഉപയോഗിച്ച്‌ പരിചയം ഇല്ലെങ്കിൽ, [GUI ഉപയോഗിച്ച് ചെയ്യാൻ ഉള്ള നിർദേശങ്ങൾ ഇവിടെ ലഭ്യമാണ്](#tutorials-using-other-tools)*. + +fork this repository + +താങ്കളുടെ കമ്പ്യൂട്ടറിൽ ഗിറ്റ് (git) ഇല്ലെങ്കിൽ, [ഇൻസ്റ്റാൾ ചെയ്യുക](https://help.github.com/articles/set-up-git/). + +## ഈ റെപ്പോസിറ്ററി ഫോർക്ക് (fork) ചെയ്യുക + +ഈ പേജിന്റെ ഏറ്റവും മുകളിൽ ഉള്ള ഫോർക്ക് ബട്ടൺ ഉപയോഗിച്ച് ഈ റെപ്പോസിറ്ററി ഫോർക്ക് ചെയ്യുക. ഇങ്ങനെ ചെയ്യുമ്പോൾ നിങ്ങളുടെ അക്കൗണ്ടിൽ ഈ റെപ്പോസിറ്ററിയുടെ ഒരു പകർപ്പ് സൃഷ്ടിക്കപ്പെടുന്നു. + +## ഈ റെപ്പോസിറ്ററി ക്ലോൺ (clone) ചെയ്യുക + +clone this repository + +ഇനി ഫോർക്ക് ചെയ്ത റെപ്പോസിറ്ററി നിങ്ങളുടെ കമ്പ്യൂട്ടറിലേക്ക് ക്ലോൺ ചെയ്യുക. നിങ്ങളുടെ ഗിറ്റ്ഹബ് (GitHub) അക്കൗണ്ട് എടുത്ത് അതിൽ ഫോർക്ക് ചെയ്ത റെപ്പോസിറ്ററി തുറക്കുക. എന്നിട്ട് മുകളിൽ ക്ലോൺ ബട്ടണിലെ *കോപ്പി ടു ക്ലിപ്പ് ബോർഡ് (Copy to clipboard)* എന്ന ഐക്കൺ ക്ലിക്ക് ചെയ്യുക. + +എന്നിട്ട് ഒരു ടെർമിനൽ എടുത്ത് താഴെ പറയുന്ന ഗിറ്റ് കമാൻഡ് റൺ ചെയ്യുക: + +``` +git clone <നിങ്ങളുടെ-ലിങ്ക്> +``` + +ഇതിൽ `<നിങ്ങളുടെ-ലിങ്ക്>` എന്ന് പറയുന്നത് താങ്കളുടെ (ഫോർക്ക് ചെയ്ത) റെപ്പോസിറ്ററി ലിങ്ക് ആണ്. ലിങ്ക് എങ്ങനെ കോപ്പി ചെയ്യാം എന്നറിയാൻ ഇതിനു മുൻപ് ഉള്ള നിർദേശം നോക്കുക. + +copy URL to clipboard + +ഉദാഹരണം: + +``` +git clone https://github.com/താങ്കൾ/first-contributions.git +``` + +ഇതിൽ `താങ്കൾ` എന്നതിന് പകരം നിങ്ങളുടെ ഗിറ്റ്ഹബ് യൂസർനെയിം കൊടുക്കുക. ഇവിടെ നിങ്ങൾ ചെയ്യുന്നത് നിങ്ങളുടെ ഗിറ്റ്ഹബിലെ ഫസ്റ്റ്-കോണ്ട്രിബൂഷൻസ് (first-contributions) റെപ്പോസിറ്ററിയിൽ ഉള്ളവ നിങ്ങളുടെ കമ്പ്യൂട്ടറിലേക്ക് കോപ്പി ചെയ്യുകയാണ്. + +## ഒരു ശാഖ (ബ്രാഞ്ച്, Branch) ഉണ്ടാക്കുക + +നിങ്ങളുടെ റെപ്പോസിറ്ററിയിലേക്ക് കടക്കുക: + +``` +cd first-contributions +``` + +എന്നിട്ട് `git checkout` എന്ന കമാൻഡ് ഉപയോഗിച്ച് ഒരു ബ്രാഞ്ച് ഉണ്ടാക്കുക: + +``` +git checkout -b <നിങ്ങളുടെ-പുതിയ-ബ്രാഞ്ചിന്റെ-പേര്> +``` + +ഉദാഹരണം: + +``` +git checkout -b add-alonzo-church +``` + +(ബ്രാഞ്ചിന്റെ പേരിൽ add എന്ന് ഉണ്ടാകണം എന്ന് നിർബന്ധം ഇല്ല. പക്ഷെ നിങ്ങളുടെ ഉദ്ദേശം നിങ്ങളുടെ പേര് ഇതിൽ ഉൾപ്പെടുത്തണം എന്നത് ആണെന്നതിനാൽ അത് കൊടുക്കുന്നതാണ് നല്ലത്.) + +## ആവശ്യത്തിനുള്ള വ്യത്യാസങ്ങൾ വരുത്തി അവ കമ്മിറ്റ് (commit) ചെയ്യുക + +ഇനി `Contributors.md` എന്ന ഫയൽ ഒരു എഡിറ്റർ ഉപയോഗിച്ച് തുറന്നതിനു ശേഷം താങ്കളുടെ പേര് അതിൽ ഉൾപ്പെടുത്തുക. അങ്ങനെ ചെയ്യുമ്പോൾ തുടക്കത്തിലോ അവസാനത്തിലോ അല്ലാതെ ഇടയിൽ എവിടെയെങ്കിലും ഉൾപെടുത്തുക. എന്നിട്ട് ആ ഫയൽ സേവ് ചെയ്യുക. + +git status + +താങ്കളുടെ പ്രൊജക്റ്റ് ഡയറക്ടറിയിൽ ചെന്ന് `git status` എന്ന കമാൻഡ് അടിച്ചു നോക്കിയാൽ താങ്കൾ വരുത്തിയ വ്യത്യാസങ്ങൾ കാണാൻ സാധിക്കും. + +ഈ വ്യത്യാസങ്ങൾ `git add` കമാൻഡ് ഉപയോഗിച്ച്‌ നിങ്ങളുടെ ബ്രാഞ്ചിലേക്ക് ചേർക്കുക: + +``` +git add Contributors.md +``` + +ഇനി നിങ്ങൾ ഉണ്ടാക്കിയ വ്യത്യാസങ്ങൾ `git commit` കമാൻഡ് ഉപയോഗിച്ച് കമ്മിറ്റ് ചെയ്യുക: + +``` +git commit -m "Add <താങ്കളുടെ-പേര്> to Contributors list" +``` + +ഇതിൽ `<താങ്കളുടെ-പേര്>` എന്ന സ്ഥാനത്ത് താങ്കളുടെ ശരിയായ പേര് കൊടുക്കുക. + +## വ്യത്യാസങ്ങൾ ഗിറ്റ്ഹബിലേക്ക് ചേർക്കുക (push) + +`git push` കമാൻഡ് ഉപയോഗിച്ച് വ്യത്യാസങ്ങൾ ഗിറ്റ്ഹബിലേക്ക് പുഷ് ചെയ്യുക: + + +``` +git push origin <താങ്കളുടെ-ബ്രാഞ്ചിന്റെ-പേര്> +``` + +ഇതിൽ <താങ്കളുടെ-ബ്രാഞ്ചിന്റെ-പേര്> എന്നതിന് പകരം താങ്കൾ നേരത്തെ ഉണ്ടാക്കിയ ബ്രാഞ്ചിന്റെ പേര് കൊടുക്കുക. + +## നിങ്ങളുടെ വ്യത്യാസങ്ങൾ പരിശോധനക്കായി (review) സമർപ്പിക്കുക + +നിങ്ങൾ ഇപ്പോൾ നിങ്ങളുടെ ഗിറ്റ്ഹബ് റെപ്പോസിറ്ററിയിൽ പോയി നോക്കിയാൽ അവിടെ `Compare & pull request` എന്ന ഒരു ബട്ടൺ കാണാം. അതിൽ അമർത്തുക. + +create a pull request + +ഇനി പുൾ റിക്വസ്റ്റ് (pull request) കൊടുക്കുക. + +submit pull request + +വൈകാതെ തന്നെ ഞാൻ താങ്കളുടെ വ്യത്യാസങ്ങൾ പ്രധാന ബ്രാഞ്ചിലേക്ക് ചേർക്കുന്നതായിരിക്കും. അപ്പോൾ താങ്കൾക്ക് ഒരു ഇമെയിൽ അറിയിപ്പ് ലഭിക്കും. + +## ഇവിടെ നിന്ന് ഇനി എങ്ങോട്ട്? + +അഭിനന്ദനങ്ങൾ! താങ്കൾ താങ്കളുടെ ആദ്യത്തെ _fork -> clone -> edit -> PR_ പടികൾ വിജയകരമായി പൂർത്തിയാക്കിയിരുന്നു. ഒരു സംഭാവകൻ എന്ന നിലക്ക് ഇത് താങ്കൾക്ക് ഇടയ്ക്കിടെ ചെയ്യേണ്ടി വരുന്ന ഒരു കാര്യം ആണ്! + +താങ്കളുടെ സംഭാവന സുഹൃത്തുക്കളും പിൻഗാമികളുമായി (followers) പങ്കിട്ട് ആഘോഷിക്കുവാനായി ഈ [വെബ് ആപ്പ് എടുക്കുക](https://firstcontributions.github.io/#social-share). + +താങ്കൾക്ക് എന്തെങ്കിലും സഹായം വേണമെങ്കിൽ, അല്ലെങ്കിൽ എന്തെങ്കിലും ചോദ്യങ്ങൾ ഉണ്ടെങ്കിൽ ഞങ്ങളുടെ [slack team-ൽ ചേരുവാനായി റിക്വസ്റ്റ് അയക്കുക](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +ഇനി താങ്കൾക്ക് മറ്റുള്ള പ്രൊജെക്ടുകളിൽ സംഭാവന ചെയ്യുവാൻ സാധിക്കും. താങ്കൾക്ക് വേഗം തുടങ്ങുവാൻ വേണ്ടി ഞങ്ങൾ എളുപ്പത്തിൽ തീർക്കാവുന്ന പ്രശ്നങ്ങൾ (issues) ഉള്ള പ്രോജക്ടുകളുടെ ഒരു ലിസ്റ്റ് ഉണ്ടാക്കിയിട്ടുണ്ട്. അത് ഇവിടെ കാണുക: [പ്രോജക്ടുകളുടെ ലിസ്റ്റ്](https://firstcontributions.github.io/#project-list). + +### [കൂടുതൽ വായിക്കുക](additional-material/git_workflow_scenarios/additional-material.md) + + +## മറ്റു ഉപകരണങ്ങൾ ഉപയോഗിച്ച് ചെയ്യുന്നതിനെ പറ്റിയുള്ള ലേഖനങ്ങൾ + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.mm_unicode.md b/translations/README.mm_unicode.md new file mode 100644 index 00000000000..15755d8929c --- /dev/null +++ b/translations/README.mm_unicode.md @@ -0,0 +1,120 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# ပထမအကြိမ် ကူညီထောက်ပံခြင်း + +ဘယ်အရာမဆို ပထမဦးဆုံးလုပ်ဆောင်အခါ အခက်အခဲတွေ့ကြံုရပါတယ်။ အထူးသဖြင့် လူအများနဲ့ ပေါင်းသင်လုပ်ကိုင်ကြတဲ့ အခါ မထင်မှတ်ထားတဲ့ အမှားများတေွ့ရတက်ပြီး အဆင်မပြေတေွတာတွေဖြစ်တက်ပါတယ်။ Open source software များကတော့ လူအများနဲ့ ပေါင်းသင်ဆက်ဆံလုပ်ကိုင် ကြရတာပါ။ ဒါကြောင့်မို့ ပထမဦးဆုံးအကြိမ် open-source project များကို ပါဝင် ကူညီထောက်ပံသူများကို ပထမဆုံးအကြိမ် ကူညီထောက်ပံနိုင်ဖို့နဲ့ လွယ်ကူ ရိုးရှင်းတဲ့ လေ့လာနည်းဖြစ်ဖို့ ရည်ရွယ်ပါတယ်။ + +လေ့ကျင်ခန်း စာစောင်တေွနဲ့ ဗီဒီယိုတေွက အကူအညီရနိုင်သော်လဲ တကယ်လက်တွေ့လုပ်ဆောင်တာထက် ပိုကောင်းတာမရှိပါဘူး။ ဒီ project က ပထမဆုံးအကြိမ် ကူညီထောက်ပံမဲ့ သူတေွအတွက် လွယ်ကူ ရှိးရှင်းပြီး အကူအညီးအထောက်ပံ့ဖြစ်စေဖို့ ရည်ရွယ်ပါတယ်။ Remember: the more relaxed you are, the better you learn. အာမခံတယ် သင့်သာ အောက်မှာရှိတဲံ အဆင့်တိုင်းလုပ်သွားလျှင် သင့်ရဲ့ ပထမဆုံး ကူညီထောက်ပံခြင်းမှာ အဆင်ပြေစွာ ပြီးမြောက်သွားမှာပါ၊ + +fork this repository + +*Read this in other languages: [English](../README.md), [Indonesian](README.id.md), [French](README.fr.md), [Spanish](README.es.md), [Dutch](README.nl.md), [Hindi](README.hi.md), [Russian](README.ru.md), [Japanese](README.ja.md), [Vietnamese](README.vn.md), [Polish](README.pl.md), [Korean](README.ko.md), [German](README.de.md), [Simplified Chinese](README.chs.md), [Traditional Chinese](README.cht.md), [Greek](README.gr.md), [العربية](README.ar.md), [Ukrainian](README.ua.md), [Português/Brasil](README.pt_br.md), [Italian](README.it.md), [ภาษาไทย](README.th.md) and [Galician](README.gl.md).* + +သင့်ရဲံစက်ထဲမှာ git မသွင်းရသေးရင်, [ ဒီမှာသွင်းနည်းကြည့် ]( https://help.github.com/articles/set-up-git/ ). + +## ဒီ repository ကို fork လုပ်ပါ + +Frok လုပ်ဖို့အတွက် စာမျက်နှာအပေါ်နားမှရှိတဲ့ fork ခလုပ်ကိုနိပ်ပါ။ +ဒီ repository က သင့် အကောင့်ကို ပုံစံတူပွားအနေနဲ့ ရောက်လာပါမယ်။ + +## ဒီ repository ကို clone လုပ်ပါ + +clone this repository + +*copy to clipboard* icon ကိုနိုပ်ပီး သင့်စက်အတွင်းသို့ ဒီ repository ကို clone လုပ်ယူပါ။ + +Terminal ကို ဖွင့်ပြီး အောက်ရှိ git command ကို run ပါ: + +``` +git clone "သင့်ကူးထားတဲ့ url ကိုထည့်ပါ" +``` +"သင့်ကူးထားတဲ့ url ကိုထည့်ပါ" (သင့်ကူထားတာ quote အမှတ်အသားမှာမပါ) နေရာမှာ ထည့်ရမှာက သင့် clone လုပ်မဲ့ repository ရဲ့ url ဖြစ်ပါတယ်။ ဒီအဆင့်ကို အဆင်မပြေဖြစ်ခဲ့ရင် အနောက်တစ်ဆင့်ကို ပြန်ကြည့်ပါ။ *copy to clipboard* icon ကို နိုပ်ပီး url ကို copy ကူးထားတာကိုတေွ့ရမှာပါ။ + +copy URL to clipboard + +ဥပမာကို အောက်မှာကြည့်ပါ: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +`this-is-you` နေရာမှာက သင့်ရဲ့ GitHub အမည်ဖြစ်ရမှာပါ။ ဒါက သင့်ရဲ့ Github မှာရှိနေတဲ့ repositoryကို သင့်စက်ထဲ့ကို copy လုပ်ခြင်းပဲဖြစ်ပါတယ်။ + +## Branch အသစ်လုပ်ခြင်း + +သင့် copy လုပ်ထားတဲ့ repository directory ကို မရောက်သေးရင် ရောက်အောင်သွားပါ။ + +``` +cd first-contributions +``` +Branch အသစ်ကို `git checkout` command ကို run ပြီးလုပ်ပါ: +``` +git checkout -b +``` + +ဥပမာ: +``` +git checkout -b add-alonzo-church +``` +(Branch နာမည်ဘာဖြစ်ဖြစ်ရပါတယ် သို့သော်လဲ ဒီ project ကသင့် နာမည်ကိုထပ်ထည့်မှာဖြစ်လို့ *add* သင့်နာမည်ကို အားလုံးနဲ့ အဆင်ပြေအောင်ထည့်ပေးပါ။) + +## ပြောင်းလဲမှုများလုပ်ပြီး အဲ့ပြောင်းလဲ့မှုများကို commit လုပ်ခြင်း + +သင့် text editor မှာ `Contributors.md` ကိုဖွင့်ပါ။ သင့်ရဲ့ နာမည်ကို အဆင်ပြေတဲ့ နေရာမှာထည့်ပြီး save ပါ။ ပြီရင် ဒီ folder ရှိတဲ့နေရာကိုသွားပြီး `git status` command ကို run ပါ။ သင့်ဘာတေွပြောင်းထားလဲဆိုတာ မြင်ရပါလိမ့်မယ်။ ဒီပြောင်းလဲမှုတေွကို သင့်ရဲ့ branch ကိုထည့်ဖို့အတွက် `git add` command ကို run ပါ: + +``` +git add Contributors.md +``` + +အခု commit လုပ်ဖို့ `git commit` command ကို run ပေးပါ : +``` +git commit -m "Add to Contributors list" +``` +`` သင့်နာမည်ကို အစားထိုးပါ။ + +## သင့်ရဲ့ ပြောင်းလဲ ပြုပြင်မှုကိုများကို Github သို့တင်ပါ + +ပြောင်းလဲမှုများကို Github သို့တင်ဖို့အတွက် `git push` ကို run ပါ: +``` +git push origin +``` +`` နေရာမှာ သင့်အသစ်လုပ်ထားတဲ့ branch နာမည်ကိုထည့်ပါ။ + +## သင့်ပြောင်းထားတာ တွေကို review လုပ်ဖို့ ပို့ပါ + +သင့် GitHub က သင့် repository ကိုမှာဆို `Compare & pull request` ဆုိတဲ့ ခလုပ်မြင်နေရမှာပါ။ အဲ့ခလုပ်ကို နိုပ်လိုက်ပါ။ + +create a pull request + +အခုဆို pull request လုပ်ဖို့အဆင်သင့်ဖြစ်သွားပါပြီး။ + +submit pull request + +သင့်ရဲ့ပြောင်းလဲမှုတေွကို ဒီ project ရဲ့ master branch မှာ ထည့်သွင်းပေးမှာဖြစ်ပါတယ်။ ဒါကြောင့် သင့်မှာ notification email ရောက်လာပါလိမ့်မယ် ဒီ project ရဲ့ master branch မှာ ထည့်သွင်းပြီးရင်ပေါ့။ + +### [ Additional material ](../additional-material/git_workflow_scenarios/additional-material.md) + +## သင်ခန်းစာ ကို အခြား Tools များအသုံးပြီး + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +## ဒီကနေ ဘယ်လိုရေှ့ဆက်မလဲ + +သင့်မှာ အကူလိုလို့ ဒါမှဟုတ်မေးစရာရှိလို ဘာပဲဖြစ်ဖြစ် slack မှာ လာပြီး လုပ်ဆောင်မေးမြန်လုိ့ရပါတယ်။ [Slack team သို့ ဒီမှာချိတ်ဆက်ပါ](https://firstcontributions.herokuapp.com) + +ဒီနေရာကနေ နာမယ့်ကြီးတဲ့ project တေွရဲ့ အခြေခံ issue များကိုသင့်ဖြေရှင်ပေးလို့ရပါပြီး။ ဒါကြောင့် သင် အောက်က repository တေွကိုသွားပြီး လေ့လာပါ။ + +|[![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|---|---|---|---|---|---|---|---| +|[exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|[![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[](https://github.com/adobe/brackets/labels/Starter%20bug)| +|[ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[brackets](https://github.com/adobe/brackets/labels/Starter%20bug)| +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)|[](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)| +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) |[Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | diff --git a/translations/README.mr.md b/translations/README.mr.md new file mode 100644 index 00000000000..1385c6f0a39 --- /dev/null +++ b/translations/README.mr.md @@ -0,0 +1,168 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# प्रथम योगदान + +सुरुवातीला कुठलीही गोष्ट करणे कठीण असते. विशेषत: आपण एकत्र काम करत असताना चुका होणे स्वाभाविक आहे. परंतु एकमेकांसोबत भेटणे आणि एकत्र कार्य करणे हेच तर मुक्त स्त्रोत (Open Source) चे गमक आहे. आम्ही आपले प्रथम मुक्त स्त्रोत योगदान (Contribution) सुलभ करण्यास मदत करू. + +लेख वाचणे आणि ट्यूटोरियल पाहण्याने आपणास मदत होऊ शकते परंतु प्रत्यक्षात सराव करण्यापेक्षा काय चांगले आहे? या प्रकल्पाचा हेतू नवशिक्यांना आपले प्रथम योगदान देण्यासंदर्भात सोप्या स्वरुपात मार्गदर्शन प्रदान करण्याचा आहे. आपण आपले प्रथम योगदान देत असल्यास, खालील पायऱ्यांचे अनुसरण करा. + +#### *जर आपल्याला कमांड लाईन (CLI) सोयीस्कर वाटत नसेल तर [GUI टूल्स वापरण्यासंदर्भात ट्यूटोरियल येथे आहेत.](#इतर-साधने-वापरण्याबाबतीत-ट्युटोरियल)* + +#### *[इतर भाषांमध्ये](translations/Translations.md) वाचा.* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴󠁥󠁳󠁧󠁡󠁿](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇷🇸](translations/README.sr.md) + +[](translations/README.en-pirate.md) + +fork this repository + +आपण आपल्या मशीनवर Git नसेल तर, [येथुन इन्स्टॉल करा](https://help.github.com/articles/set-up-git/). + +## रिपॉझिटरी (Repository) ला फोर्क (Fork) करणे + +फोर्क बटण क्लिक करून या रिपोला फोर्क करा. +हे आपल्या खात्यात या रिपॉझिटरीची प्रत (कॉपी) तयार करेल. + +## रिपॉझिटरी (Repository) ला क्लोन (Clone) करणे + +clone this repository + +आता फोर्क केलेला रिपो आपल्या संगणकावर क्लोन (Clone) करा. यासाठी आपण आपल्या गिटहब (GitHub) खात्यावर जा. जो रिपो आपण फोर्क केलेला आहे, त्याला उघडा. उघडलेल्या रिपोत उजव्या बाजुला वर `Clone or download` बटण दिसेल, त्यावर क्लिक करा. नंतर तेथील `Copy to clipboard` या आयकॉनवर क्लिक करा. याद्वारे प्रस्तुत रिपोची लिंक (URL) कॉपी झालेली असेल. + +आता आपले टर्मिनल (Terminal) उघडा व त्यात खालील git आदेश (Command) चालवा. + +``` +git clone <कॉपी-केलेली-लिंक> +``` + +copy URL to clipboard + +येथे `<कॉपी-केलेली-लिंक>` (त्रिकोणी कंस वगळता) यास आपण आताच कॉपी केलेली URL लिंक असे ग्राह्य धरण्यात यावे. ही URL लिंक मिळवण्याकरता याआधीच्या पायरीचे अवलोकन करावे. + +उदाहरणार्थ: + +``` +git clone https://github.com/तुमचे-युझर-नाव/first-contributions.git +``` + +येथे `तुमचे-युझर-नाव` याचा अर्थ आहे, आपल्या गिटहब खात्याचे नाव (Username). + +आता एंटर (Enter/Return) बटण दाबा. याद्वारे प्रस्तुत रिपो `first-contributions` आपल्या संगणकावर कॉपी होईल. + +## ब्रांच (Branch) बनवणे. + +आपल्या टर्मिनल वरुन आपली रिपो फोल्डर/डायरेक्टरी (Folder/Directory) बदला (जर आपण अद्याप बदलले नसेल तर). + +``` +cd first-contributions +``` + +आता `git checkout` ही कमांड वापरुन नवीन ब्रांच तयार करा. + +``` +git checkout -b <आपल्या-ब्रांचचे-नाव-येथे-टाका> +``` + +उदा: + +``` +git checkout -b add-rahul-thakare +``` + +(प्रत्येक ब्रांचच्या नावात `add` हा शब्द असणे आवश्यक नाही, परंतु वरील उदाहरणात त्याचा समावेश असणे ही एक वाजवी गोष्ट आहे कारण ईथे आपले नाव सूचीमध्ये जोडणे हा या शाखेचा उद्देश आहे.) + +## आवश्यक बदल करणे आणि ते बदल कमिट (Commit) करणे. + +आता मजकूर संपादक मध्ये `Contributors.md` फाइल उघडा, व त्यात आपले नाव जोडा. फाइलच्या सुरवातीस किंवा समाप्तीमध्ये जोडू नका. त्यामध्ये कुठेही ठेवा. आता फाईल सेव्ह (Save) करा. + +git status + +आता तुम्ही पुन्हा टर्मिनल कडे जाल आणि `git status` ही कमांड चालवाल तर तुम्हाला त्यात काही बदल झालेले दिसतील. + +`git add` कमांड वापरुन आपण तयार केलेल्या शाखेत ते बदल जोडा + +``` +git add Contributors.md +``` + +आता `git commit` ही कमांड वापरुन आपले बदल कमिट/सुरक्षित करा. + +``` +git commit -m "Add <तुमचे-नाव> to Contributors list" +``` + +`<तुमचे-नाव>` च्याऐवजी आपले नाव टाका. + +## गिटहब मध्ये आपले बदल पुश करणे. + +`git push` वापरून आपले बदल पुश करा + +``` +git push origin <आपल्या-शाखेचे-नाव> +``` + +`<आपल्या-शाखेचे-नाव>` च्या जागी आपल्या ब्रांचचे नाव टाका. + +## पुनरावलोकनासाठी आपले बदल सबमिट करणे. + +आपण आपल्या गिटहब प्रोफाइलवर आपल्या रिपो वर गेल्यास, आपल्याला `Compare & pull request` पाठविण्याचा पर्याय दिसेल, ते दाबा. +create a pull request + +आता आपल्या `Pull request` सबमिट करा. + +submit pull request +लवकरच मी आपले बदल या प्रकल्पाच्या मुख्य शाखेत विलीन करेन. जेव्हा आपले बदल विलीन होतील तेव्हा आपल्याला ई-मेल मिळेल. + +## आता पुढे काय? + +अभिनंदन! आपण नुकतीच _fork -> clone -> edit -> PR_ ही कार्यपद्धती पूर्ण केली आहे ज्यास आपणास एक योगदानकर्ता (Contributor) म्हणून सदैवच तोंड द्यावे लागते! + +आपले योगदान साजरे करा आणि [येथे](https://roshanjossey.github.io/first-contributions/#social-share) जाऊन आपल्या मित्र आणि अनुयायांसह शेअर/सामायिक करा. + +आपल्याला कोणत्याही मदतीची आवश्यकता असल्यास किंवा काही प्रश्न असल्यास आपण आमच्या स्लॅक टीममध्ये सामील होऊ शकता. [स्लॅक टीममध्ये सामील व्हा](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +आता आपण इतर प्रकल्पांमध्येही आपले योगदान देऊ शकता. आपण प्रारंभ करू शकाल अशा सुलभ समस्यांसह (Issues) आम्ही काही प्रोजेक्टची सूची संकलित केली आहे. [येथे वेब अॅप मधील प्रकल्पांची यादी पहा.](https://roshanjossey.github.io/first-contributions/#project-list) + +## इतर साधने वापरण्याबाबतीत ट्युटोरियल + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| diff --git a/translations/README.mx.md b/translations/README.mx.md new file mode 100644 index 00000000000..eeaa49349b3 --- /dev/null +++ b/translations/README.mx.md @@ -0,0 +1,165 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Primera contribuciones + +Es complicado. Siempre resulta difícil la primera vez que haces algo. Principalmente cuando colaboras con otros, pues cometer errores no es agradable. Queremos simplificar la forma en la que los nuevos contribuidores de _open source_ aprenden y contribuyen por primera vez. + +Leer artículos y ver tutoriales puede ayudar, pero ¿Qué mejor que hacer las cosas en un ambiente de prácticas?. Este proyecto se enfoca en guíar y en simplificar la forma en la que los principiantes hacen su primera contribución. Si buscas hacer tu primera contribución, sigue los pasos que se muestran a continuación. + +#### *Si no estás cómodo con la linea de comandos, [aqui hay unos tutoriales usando herramientas gráficas.]( #tutorials-using-other-tools )* + +#### *Puedes leer esto [en otros lenguajes](translations/Translations.md).* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴󠁥󠁳󠁧󠁡󠁿](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇷🇸](translations/README.sr.md) + + + +fork de este repositorio + +Si no tienes git en tu equipo, aquí las instrucciones para instalarlo en el [enlace]( https://help.github.com/articles/set-up-git/ ) + +## Dale Fork al repositorio + +Fork this repo by clicking on the fork button on the top of this page. +This will create a copy of this repository in your account. + +Dale "fork" a este repositorio dando click en el botón "*Fork*" en la parte superior derecha de la página. +Esto creará una copia de este repositorio en tu cuenta. + +## Clona "Clone" el repositorio + +clonar este repositorio + +Ahora clona este repositorio en tu equipo. ve a tu cuenta de Github, y da click en el botón "*clone or download*" y luego da click en el ícono para *copiar*. + +Abre tu consola o terminal y ejecuta el siguiente comando: + +``` +git clone "la url del repositorio que copiaste" +``` + +Donde "url que acabas de copiar" (sin las comillas dobles) es la *url* a este repositorio (tu *fork* a este proyecto). Mira los pasos previos para obtener la *url*. + +copiar URL al portapapeles + +Por ejemplo: +``` +git clone https://github.com/usuarioGitHub/first-contributions.git +``` +Donde `usuarioGitHub` es tu usuario de GitHub. Aquí estás copiando los contenidos del repositorio *first-contributions* en GitHub a tu equipo. + +## Crea una rama (*Branch*) + +Cambia al directorio del repositorio en tu equipo (si es que no estás ahí ya). + +``` +cd first-contributions +``` + +Ahora crea una rama (*branch*) usando el comando `git checkout`: +``` +git checkout -b +``` + +Por ejemplo: +``` +git checkout -b add-juan-perez +``` +(El nombre de la rama no tiene por qué contener la palabra *add*, pero es razonable que lo tenga porque el objetivo de esta rama es añadir tu nombre a la lista.) + +## Haz los cambios necesarios y salva (*Commit*) esos cambios + +Abre el archivo `Contributors.md` en un editor de texto y añade tu nombre. No lo añadas ni al principio ni al final del archivo, hazlo en cualquier otro sitio. Guarda el archivo. + +git status + +Si vas al directorio del proyecto y ejecutas el comando `git status`,podrás ver los cambios ya reflejados. + +Agrega esos cambios a la rama (*branch*) que creaste antes usando el comando `git add`: + +``` +git add Contributors.md +``` + +Ahora puedes hacer un *commit* sobre estos cambios ejecutando el comando `git commit`: +``` +git commit -m "Add to Contributors list" +``` +reemplazando `` con tu nombre. + + +## Carga (*Push*) tus cambios a GitHub + +mandar un *push* de tus cambios usando el comando `git push`: +``` +git push origin +``` +Reemplaza `` con el nombre de la rama que creaste anteriormente. + +## Envía (*Submit*) tus cambios para ser revisados + +Si vas a tu repositorio en GitHub, verás un botón `Compare & pull request`. Haz click sobre este botón. + +crea una pull request + +Ahora envía el *pull request*. + +enviar la pull request + +Pronto estaré combinando tus cambios (haciendo *merge*) con la rama master de este proyecto. Recibirás una notificación por correo electrónico cuando los cambios hayan sido combinados. + +## ¿Cuáles son los siguientes pasos? + +¡Felicidades! ¡Has completado la linea de trabajo *_fork -> clone -> edit -> PR_* que encontrarás habitualmente como contribuidor! + +Festeja tu contribución y compártela con tus amigos y seguidores yendo a [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +También podrías unirte a nuestro *equipo* de Slack en caso de que necesites ayuda o tengas alguna pregunta. [Únete a nuestro Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Ahora empieza a contribuir a otros proyectos. Hemos reunido una lista de proyectos con *issues* sencillas para que puedas empezar. Échale un ojo a la [lista de proyectos en la web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Material adicional](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutoriales con otras herramientas + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)| diff --git a/translations/README.my.md b/translations/README.my.md new file mode 100644 index 00000000000..2f8b1ef3e8c --- /dev/null +++ b/translations/README.my.md @@ -0,0 +1,121 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Sumbangan Pertama + +Ia sukar. Ia sentiasa sukar buat kali pertama kamu melakukan sesuatu. Terutama apabila kamu berkolaborasi, membuat kesilapan bukan perkara yang selesa. Kami mahu menyederhanakan cara penyumbang sumber terbuka baru belajar & menyumbang buat kali pertama. + +Membaca artikel & menonton tutorial boleh membantu, tetapi apa yang lebih baik daripada melakukan perkara dalam persekitaran yang pratikal? Projek ini bertujuan memberi bimbingan & memudahkan seseorang yang baru bermula untuk membuat sumbangan pertama mereka. Jika kamu ingin membuat sumbangan pertama kamu, ikuti langkah-langkah di bawah. + +#### *Jika anda tidak selesa dengan 'command line', [sini adalah tutorial menggunakan alat GUI.]( #tutorials-using-other-tools )* + +fork this repository + +Jika anda tidak mempunyai git dalam mesin kamu, [pasang](https://help.github.com/articles/set-up-git/). + +## Fork repositori ini + +Fork repo ini dengan mengklik butang fork di atas halaman ini. +Ini akan membuat salinan repositori ini dalam akaun kamu. + +## Klon repositori + +clone this repository + +Sekarang klon repo yang bercabang ke mesin kamu. Pergi ke akaun GitHub anda, buka repo yang bercabang, klik pada butang klon dan kemudian klik ikon * copy to clipboard *. + +Buka terminal dan jalankan arahan git berikut: + +``` +git clone "url anda baru disalin" +``` +dimana "url anda baru disalin" (tanpa tanda petikan) adalah url ke repositori ini (fork projek anda). Lihat langkah-langkah sebelumnya untuk mendapatkan url. + +copy URL to clipboard + +Contoh: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +dimana `this-is-you` adalah nama pengguna GitHub kamu. Di sini kamu menyalin kandungan repositori sumbangan pertama dalam GitHub ke komputer kamu. + +## Membuat cawangan + +Tukar ke direktori repositori pada komputer kamu (jika kamu belum berada disana): + +``` +cd first-contributions +``` +Sekarang cipta cawangan menggunakan arahan `git checkout`: +``` +git checkout -b +``` + +Contoh: +``` +git checkout -b add-alonzo-church +``` +(Nama cawangan tidak perlu mempunyai perkataan * add * di dalamnya, tetapi ia adalah perkara yang munasabah untuk disertakan kerana tujuan cawangan ini adalah untuk menambah nama anda ke senarai.) + +## Buat perubahan yang diperlukan dan komit perubahan tersebut + +Sekarang buka fail `Contributors.md` dalam editor teks, tambahkan nama anda kepadanya. Jangan tambahkannya pada awal atau akhir fail. Letakkan di mana sahaja di antara. Sekarang, simpan fail itu. + +git status + + +Jika anda pergi ke direktori projek dan laksanakan arahan `git status`, kamu akan melihat perubahanya. + +Tambah perubahan tersebut ke cawangan yang baru kamu cipta menggunakan arahan `git add`: + +``` +git add Contributors.md +``` + +Sekarang komit perubahan tersebut menggunakan perintah `git commit`: +``` +git commit -m "Add to Contributors list" +``` +menggantikan `` dengan nama kamu. + +## Push changes to GitHub + +Tolak perubahan anda menggunakan arahan `push push`: +``` +git push origin +``` +menggantikan `` dengan nama cawangan yang kamu cipta sebelumnya. + +## Hantar perubahan anda untuk semakan + +Jika anda pergi ke repositori anda di GitHub, anda akan melihat butang `Compare & pull request`. Klik pada butang itu. + +create a pull request + +Sekarang hantar 'pull request' itu. + +submit pull request + +Tidak lama lagi saya akan menggabungkan semua perubahan anda ke cawangan 'master' projek ini. Anda akan mendapat e-mel pemberitahuan sebaik sahaja perubahan telah digabungkan. + +## Ke mana pergi dari sini? + +Tahniah! Anda baru saja selesai melaksanakan standard _fork -> clone -> edit -> PR_ aliran kerja yang sering kamu akan terserempak sebagai seorang penyumbang! + +Raikan sumbangan kamu dan kongsi dengan rakan dan pengikut kamu dengan pergi ke [aplikasi web](https://roshanjossey.github.io/first-contributions/#social-share). + +Anda boleh menyertai pasukan 'Slack' kami sekiranya anda memerlukan bantuan atau mempunyai sebarang soalan. [Sertai pasukan Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Sekarang mari kita mulakan dengan menyumbang kepada projek lain. Kami telah menyusun senarai projek dengan isu mudah yang boleh anda mulakan. Semak [senarai projek dalam aplikasi web](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Bahan tambahan](additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutorial Menggunakan Alat Lain + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.nl.md b/translations/README.nl.md new file mode 100644 index 00000000000..b86099ce5b3 --- /dev/null +++ b/translations/README.nl.md @@ -0,0 +1,145 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Eerste bijdragen + +De eerste keer dat je iets nieuws probeert is altijd lastig, helemaal wanneer je samen werkt - kan het maken van fouten erg vervelend zijn. Maar in open-source ontkom je niet aan samenwerken. We willen het graag makkelijker maken om te leren en bij te dragen voor de eerste keer aan een open-source project. + +Het kan helpen om de artikelen te lezen en de video's te bekijken, maar niets is beter dan het gelijk te doen terwijl je leert en je niet de kans hebt om een fout te maken. Dit project richt zich op het begeleiden en het makkelijker maken voor beginners om hun eerste bijdrage te leveren aan een project. Onthoud: Hoe meer ontspannen je bent hoe beter je leert. Indien je op zoek bent om je eerste bijdrage te leveren aan open-source volg dan de onderstaande stappen. Wij beloven dat je het leuk zal vinden xxxx. + +fork deze repository + +#### *Lees dit in [andere talen](../Translations.md)* + +Indien je git nog niet hebt op je systeem, [ installeer het dan eerst ]( https://help.github.com/articles/set-up-git/ ) + +## Deze repository forken + +Fork deze repository door op de fork knop te klikken. Dit creëert een kopie van deze repository in jouw account. + +## De repository clonen + +kloon deze repository + +Kloon nu deze repository naar je systeem. Klik op de kloon knop en dan het kopiëren naar klembord icoon. + +Open een terminal en voer volgend git commando uit: + +``` +git clone "url die je net kopieerde" +``` +Waar "url die je net kopieerde" (zonder aanhalingstekens) de url naar (jouw fork van) deze repository is. Zie de vorige stappen om de url te vinden. + +kopieer URL naar het klembord + +Bijvoorbeeld: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +Waar 'this-is-you' je GitHub gebruikersnaam is. Hiermee kopieer je inhoud van de first-contributions repo op GitHub naar je systeem. + +## Een branch aanmaken + +Navigeer naar de map van de repository op je systeem (mocht je daar niet al zijn). + +``` +cd first-contributions +``` +Maak nu een branch aan door middel van het `git checkout command` +``` +git checkout -b +``` + +Bijvoorbeeld: +``` +git checkout -b add-thibmaek +``` +(De naam van de branch hoeft niet het woord *add* te bevatten. In dit voorbeeld is het wel te adviseren aangezien het doel van deze branch hiermee duidelijk wordt gemaakt.) + +## Maak de benodigde wijzigingen en commit deze + +Open nu het `Contributors.md` bestand in een teksteditor en voeg je naam toe. Doe dit niet aan het begin of eind, maar ergens in het midden. Sla vervolgens het bestand op. + +Als je naar de projectmap gaat en `git status` doet, zul je zien dat er wijzigingen zijn. Voeg deze toe aan je branch met behulp van onderstaand `git add` commando. +``` +git add Contributors.md +``` + +Commit nu deze wijzigingen door onderstaand `git commit` commando te gebruiken. +``` +git commit -m "Add to Contributors list" +``` +vervang `` met jouw naam + +## Push de wijzigingen naar GitHub + +Push je wijzigingen met `git push` +``` +git push origin +``` +Vervang `` met de naam van de branch die je eerder aanmaakte. + +## Verstuur je wijzigingen voor review + +Als je naar je repository gaat op GitHub, zal je zien dat er een `Compare & pull request` knop staat. Klik hierop. + +creëer een pull request + +Verstuur nu je pull request. + +verstuur je pull request + +Nu ga ik (de beheerder) al je wijzigingen mergen in de master branch van dit project. Als de veranderingen gemerged zijn, zul je hier een e-mailnotificatie over ontvangen. + +## Je fork in sync houden met de hoofd-repository + +Wanneer de pull request wordt geaccepteerd en gemerged, zal jouw fork de wijzigingen nog niet bevatten - hiervoor moet je nog een aantal extra stappen ondernemen. + +Om beide repo's met elkaar in sync te houden voeg je de hoofd repo (mijne) url in als `upstream remote url`. +``` +git remote add upstream https://github.com/firstcontributions/first-contributions +``` +Hiermee vertel je git dat er nog een andere versie van dit project bestaat op dit specifieke url punt en dat we het upstream zullen noemen. Wanneer de wijzigingen gemerged zijn, kun je de nieuwe versie ophalen (fetchen) van mijn repo. +``` +git fetch upstream +``` + +Hiermee fetchen we alle wijzigingen in mijn fork (upstream remote). Nu zal je de nieuwe revisie/versie van mijn repo moeten mergen in jouw master branch. +``` +git rebase upstream/master +``` +Dit voegt alle wijzigingen toe die je net fetchte van de master branch. Als je nu probeert je master branch te pushen, zal je fork al deze wijzigingen ook bevatten. +``` +git push origin master +``` +Merk op dat je in dit geval pusht naar de remote met de naam origin. + +## Tutorials gebruiken Andere hulpmiddelen + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +## Hoe nu verder? + +Gefeliciteerd! Je hebt zojuist de standaard _fork -> clone -> edit -> PR_ workflow doorlopen die je vaak zult tegenkomen als bijdrager! + +Vier je bijdrage en deel het met je vrienden en volgers via de [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Mocht je nog vragen of hulp nodig hebben dan kun je je aanmelden voor ons [Slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Laten we je nu op weg helpen met het bijdragen aan andere projecten. We hebben een lijst samengesteld met projecten die makkelijke issues bevatten waar je aan kunt werken. Bekijk [de lijst op de web app](https://roshanjossey.github.io/first-contributions/#project-list) + +Hier zijn enkele beginner-level issues in populaire repos die je kan proberen oplossen. Ga verder naar deze repos om meer te lezen. + +|[![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|---|---|---|---|---|---|---|---| +|[exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|[![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[](https://github.com/adobe/brackets/labels/Starter%20bug)| +|[ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[brackets](https://github.com/adobe/brackets/labels/Starter%20bug)| +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)|[](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)| +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) |[Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | diff --git a/translations/README.no.md b/translations/README.no.md new file mode 100644 index 00000000000..5ba05f3212c --- /dev/null +++ b/translations/README.no.md @@ -0,0 +1,121 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Første bidrag + +Det er alltid vanskelig å gjøre noe for første gang. Spesielt når man samarbeider med andre kan det være tungt å gjøre feil. Vi ønsker å gjøre det lettere for nybegynnere å bidra til open-source. + +Å lese artikler og se videoer kan hjelpe, men hva kan vel være bedre enn å gjøre det i praksis? Dette prosjektet håper å kunne tilby en enkel veiledning og gjøre det lett for nybegynnere å gi sitt første bidrag. Følg trinnene nedenfor hvis du ønsker å gi ditt første bidrag til dette prosjektet. + +#### *Hvis du ikke er komfortabel med terminal, [så finnes det andre metoder](#veiledning-for-andre-verktøy).* + +#### *Les dette på [andre språk (other languages)](/translations/Translations.md).* + +fork this repository + +Om du ikke har git installert på din maskin, [følg denne veiledningen](https://help.github.com/articles/set-up-git/). + +## Fork dette prosjektet + +Fork prosjektet ved å klikke på "fork" knappen på toppen av denne siden. Dette vil legge til en kopi av dette prosjektet til din GitHub konto (prosjekter kalles repository på GitHub). + +## Clone prosjektet + +clone this repository + +Nå skal vi klone prosjektet fra GitHub til din maskin. Gå til din GitHub konto og åpne din nye fork, deretter klikk på "clone" knappen og kopier linken. + +Åpne en terminal/kommandolinje og kjør følgende git kommando: +``` +git clone +``` +Erstatt `` med linken du kopierte i forrige trinn. + +
copy URL to clipboard + +Eksempel: +``` +git clone https://github.com/ditt-brukernavn/first-contributions.git +``` +hvor `ditt-brukernavn` er ditt GitHub brukernavn. Her kopierer vi innholdet i first-contributions prosjektet fra din GitHub konto til din lokale maskin. + +## Opprett en branch + +Naviger terminalen inn i prosjektet (hvis du ikke er der allerede): +``` +cd first-contributions +``` + +Opprett en branch med `git checkout` kommandoen: +``` +git checkout -b +``` + +Eksempel: +``` +git checkout -b add-alonzo-church +``` +Navnet på din branch behøver ikke å inneholde ordet *add*, men det gir mening å inkludere det i denne sammenhengen. Endre "alonzo-church" til ditt navn. + +## Lag endringer og commit dem + +Åpne filen `Contributors.md` i et program for å redigere tekst og legg til ditt navn i listen. Ikke legg det til i begynnelsen eller slutten av filen, legg det til hvor som helst i mellom. Når du har gjort dette kan du lagre filen. + +git status + + +Hvis du åpner terminalen igjen og kjører kommandoen `git status`, vil du se dine endringer. + + +Legg endringene til i din nye branch med kommandoen `git add`: +``` +git add Contributors.md +``` + +Commit endringene med kommandoen `git commit`: +``` +git commit -m "Add to Contributors list" +``` +Erstatt `` med ditt navn. + +## Push endringene til GitHub + +Push til GitHub med kommandoen `git push`: +``` +git push origin +``` +Erstatt `` med navnet på branch som du opprettet tidligere. + +## Send inn endringene for gjennomgang + +Hvis du går til ditt prosjekt på GitHub, vil du se en `Compare & pull request` knapp. Klikk på den for å opprette en pull request. + +create a pull request + +Send inn din pull request når du er klar. + +submit pull request + +Snart vil jeg merge dine endringer inn i master branch av mitt prosjekt. Du vil motta en notifikasjon på epost når dine endringer er lagt til. + +## Hva nå? + +Gratulerer! Du har gjennomført standardprosessen for _fork -> clone -> edit -> PR_, en prosess du vil møte på ofte! + +Feir ditt bidrag og del det med dine venner og følgere ved å gå til [web app](https://firstcontributions.github.io/#social-share). + +Behøver du hjelp eller vil stille spørsmål så kan du bli med i vår slack-gruppe. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + +Nå kan du gå videre og bidra til andre open-source prosjekter. Vi har satt sammen en liste med enkle og overkommelige problemer du kan starte med. Sjekk den ut her: [the list of projects in the web app](https://firstcontributions.github.io/#project-list). + +### [Ekstramateriale](/additional-material/git_workflow_scenarios/additional-material.md) + + +## Veiledning for andre verktøy + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](/github-desktop-tutorial.md)|[Visual Studio 2017](/github-windows-vs2017-tutorial.md)|[GitKraken](/gitkraken-tutorial.md)|[Visual Studio Code](/github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](/sourcetree-macos-tutorial.md)| diff --git a/translations/README.np.md b/translations/README.np.md new file mode 100644 index 00000000000..dbcf1ff7114 --- /dev/null +++ b/translations/README.np.md @@ -0,0 +1,119 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# पहिलो योगदान +यो कठिन छ। पहिलो पल्ट केहि गर्दा सधै कठिन हुन्छ। बिशेष गरि जब तपाई योगदान गर्दै हुनुहुन्छ,गल्ति हुनु सहज कुरा हैन। हामी नया खुला स्रोत योगदानकर्ताले सिक्ने र योगदान गर्ने तरिका लाई सहज बनाउन चहन्थियेउम। + +लेखहरू पढ्न र ट्यूटोरियलहरू हेर्न मद्दत गर्न सक्दछ, तर वास्तवमा एक अभ्यास वातावरणमा गरेर हेर्दा भन्दा के असल होला र। यो परियोजनाले निर्देशन प्रदान गर्न र शुरुआती शुरुवातहरूलाई उनीहरूको पहिलो योगदान प्रदान गर्ने तरिका सरल बनाउँदछ। यदि तपाईं आफ्नो पहिलो योगदान बनाउन खोज्दै हुनुहुन्छ भने तलको चरणहरू पालना गर्नुहोस्। + +#### *यदि तपाईं कमांड रेखासँग सहज हुनुहुन्न भने, [यहाँ GUI उपकरणहरू प्रयोग गरेर ट्यूटोरियलहरू छन्।]( #tutorials-using-other-tools )* + +#### *यो अन्य [भाषाहरूमा](Translations.md) पढ्नुहोस्।* + +यो भण्डार फोर्क गर्नुहोस। + +यदि तपाईंसँग तपाइँको मेशिनमा Git छैन, [यसलाई इन्स्टल गर्नुहोस्]( https://help.github.com/articles/set-up-git/). + +## यो भण्डार फोर्क गर्नुहोस +यस पृष्ठको शीर्षमा फोर्क बटनमा क्लिक गरेर यो रिपो फोर्क गर्नुहोस। यसले तपाईंको खातामा यस भण्डारको प्रतिलिपि सिर्जना गर्नेछ। + +## भण्डार क्लोन गर्नुहोस् + +यो भण्डारलाई क्लोन गर्नुहोस् + +अब तपाइँको मेसिनमा फोर्क गरिएको रिपो क्लोन गर्नुहोस। तपाईंको GitHub खातामा जानुहोस्, फोर्क गरिएको रिपो खोल्नुहोस्, क्लोन बटनमा क्लिक गर्नुहोस् र त्यसपछि *copy to clipboard* आइकनमा क्लिक गर्नुहोस्। + +टर्मिनल खोल्नुहोस् र निम्न Git आदेश चलाउनुहोस्: + +``` +git clone "url तपाईंले भर्खरै प्रतिलिपि गर्नुभएको" +``` +जहाँ "युआरएल तपाईंले भर्खरै प्रतिलिपि गर्नुभयो" (" चिन्हहरू बिना) यस भण्डारको url हो (यस परियोजनाको तपाईंको फोर्क)। Url प्राप्त गर्न अघिल्लो चरण हेर्नुहोस्। + +URL लाई क्लिपबोर्डमा प्रतिलिपि बनाउनुहोस् + +उदाहरणका लागि: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +जहाँ `this-is-you` तपाईंको GitHub प्रयोगकर्ता नाम हो। यहाँ तपाइँ GitHub मा तपाईंको कम्प्युटरमा पहिलो-योगदान भण्डारको सामग्री प्रतिलिपि गर्दै हुनुहुन्छ। + +## एक शाखा बनाउनुहोस् + +तपाईंको कम्प्यूटरमा भण्डार गरिएको डाइरेक्टरीमा परिवर्तन गर्नुहोस् (यदि तपाईं पहिले नै हुनुहुन्न भने): + +``` +cd first-contributions +``` +अब `git checkout` आदेश प्रयोग गरेर एउटा शाखा सिर्जना गर्नुहोस्: +``` +git checkout -b <शाखाको-नाम> +``` +उदाहरणका लागि: +``` +git checkout -b add-milap-neupane +``` +(शाखा को नाममा *add* शब्द को आवश्यकता छैन, तर यसमा एक उचित कुरा समावेश छ किनभने यस शाखाको उद्देश्य तपाईंको नामलाई सूचीमा थप्न हो।) + +## आवश्यक परिवर्तनहरू गर्नुहोस् र ती परिवर्तनहरू प्रतिबद्ध गर्नुहोस् + +अब पाठ सम्पादकमा `Contributors.md` फाइल खोल्नुहोस्, यसलाई तपाईंको नाम थप्नुहोस्। फाइलको सुरुवात वा अन्त्यमा यसलाई जोड नगर्नुहोस्। यसलाई बीचमा राख्नुहोस्। अब, फाईल save गर्नुहोस्। + +git status + + +यदि तपाईं प्रोजेक्ट डाइरेक्टरीमा जानुहोस् र आदेश `git status` लाई कार्यान्वयन गर्नुहुन्छ भने,तपाइँ त्यहाँ परिवर्तनहरू देख्नुहुनेछ। + +तपाईँले भर्खरै बनाएको शाखामा `git add` कमांड प्रयोग गरी ती परिवर्तनहरू थप्नुहोस्: + +``` +git add Contributors.md +``` + +अब `git commit` आदेश प्रयोग गरेर ती परिवर्तनहरू प्रतिबद्ध गर्नुहोस्: +``` +git commit -m "योगदान सूचीमा <तपाइको-नाम> थप गर्नुहोस्" +``` + +तपाईंको नामको साथ `<तपाईंको-नाम>` को स्थानान्तरण गर्नुहोस्। + +## GitHub मा परिवर्तन पुश गर्नुहोस + +आदेश `git push` को प्रयोग गरेर आफ्नो परिवर्तन पुश गर्नुहोस्: +``` +git push origin <शाखाको-नाम> +``` +तपाईले पहिले सिर्जना गर्नुभएको शाखाको नामको साथ `<शाखाको-नाम>` को प्रतिस्थापन गर्नुहोस्। + +## समीक्षाको लागि तपाईंको परिवर्तनहरू पेश गर्नुहोस् + +यदि तपाईं GitHub मा तपाईंको भण्डारमा जानुहुन्छ भने, तपाइँ एक `compare र pull request` बटन देख्नुहुनेछ। त्यस बटनमा क्लिक गर्नुहोस्। + +एउटा पुल अनुरोध सिर्जना गर्नुहोस् + +अब pull request पेश गर्नुहोस्। + +submit pull request + +चाँडै म यस परियोजनाको मास्टर शाखामा तपाईका सबै परिवर्तनहरू मर्ज गर्नेछु। परिवर्तनहरू विलय भएपछि एक अधिसूचना इमेल प्राप्त गर्नुहुनेछ। + +## यहाँबाट कहाँ जानुहुन्छ? + +बधाई छ! तपाईले _फर्क -> क्लोन -> सम्पादन -> PR_कार्यप्रवाह पूरा गर्नुभयो जुन तपाई प्राय: एक योगदानकर्ताको रूपमा सामना गर्नुहुनेछ! + +तपाईंको योगदान मनाउनुहोस् र आफ्नो साथी र अनुयायीहरूसँग [वेब अनुप्रयोग](https://roshanjossey.github.io/first-contributions/#social-share) मा जानुहोस्। + +तपाइँलाई कुनै पनि मद्दत चाहिन्छ वा कुनै प्रश्न छ भने तपाइँ हाम्रो स्लाक टोलीमा सामेल हुन सक्नुहुनेछ। [स्लाक टोलीमा सामेल हुनुहोस्](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +अब तपाईले अन्य परियोजनाहरूमा योगदान दिन सुरु गरौं। हामीले सुरू गर्न सक्नुहुने सजिलो समस्याहरूको साथमा परियोजनाहरूको सूची संकलन गरेको छ। जाँच गर्नुहोस् [वेब अनुप्रयोगमा परियोजनाहरूको सूची](https://roshanjossey.github.io/first-contributions/#project-list)। + +### [थप सामग्री](additional-material/git_workflow_scenarios/additional-material.md) + +## ट्यूटोरियलहरू अन्य उपकरणहरू प्रयोग गर्दै + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.pl.md b/translations/README.pl.md new file mode 100644 index 00000000000..0e7f78f3600 --- /dev/null +++ b/translations/README.pl.md @@ -0,0 +1,121 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Pierwsze kontrybucje + +Zawsze jest ciężko, kiedy robisz coś po raz pierwszy. Szczególnie gdy współpracujesz z innymi ludźmi, ponieważ popełnianie błędów nie jest niczym przyjemnym. Jednak właśnie na współpracy opiera się idea otwartego oprogramowania. Chcemy nauczyć w prosty sposób nowych programistów jak wgrać swoją pierwszą zmianę w obcym projekcie. + +Czytanie artykułów i oglądanie poradników może pomóc, ale czy jest coś lepszego niż spróbowanie czegoś samemu bez obaw, że się coś zepsuje? Ten projekt ma na celu dostarczyć nowicjuszom wskazówek i uprościć proces wgrania pierwszej zmiany. Pamiętaj: im bardziej jesteś zrelaksowany, tym lepiej się uczysz. Jeśli chcesz wgrać swoją pierwszą kontrybucję wykonaj kilka prostych kroków poniżej. Będzie fajnie, obiecujemy. + +fork this repository + +Jeśli nie masz Gita na swoim komputerze, [ zainstaluj go ]( https://help.github.com/articles/set-up-git/ ). + +## Utwórz fork repozytorium + +Utwórz fork tego repozytorium klikając przycisk "Fork" na górze tej strony. +Stworzysz tym samym kopie tego repozytorium na swoim koncie. + +## Sklonuj repozytorium + +clone this repository + +Teraz sklonuj repozytorium na swój komputer. Kliknij na przycisk "clone" a później na ikonkę *skopiuj do schowka*. + +Otwórz konsolę i uruchom komendę git: + +``` +git clone "wklej skopiowany adres" +``` +Gdzie "wklej skopiowany adres" (bez cudzysłowia) to adres tego repozytorium. Zobacz poprzedni krok aby skopiować adres. + +copy URL to clipboard + +Przykład: +``` +git clone https://github.com/to-ty/first-contributions.git +``` +W miejscu 'to-ty' to twój login na githubie. W tym kroku ściągasz zawartość twojej kopii repozytorium first-contributions z githuba na swój komputer. + +## Stwórz gałąź + +Wejdź w folder ze swoim repozytorium (jeżeli jeszcze tam nie jesteś): + +``` +cd first-contributions +``` +Teraz utwórz nową gałąź wykonując polecenie `git checkout`: + +``` +git checkout -b +``` + +Przykład +``` +git checkout -b add-adam-kowalski +``` +(Nazwa gałęzi nie musi zawierać słowa *add*, ale dobrze jest je dodać z racji tego, że celem tej gałęzi jest dodanie twojego imienia to listy.) + +## Wprowadź zmiany i wgraj je + +Otwórz plik `Contributors.md` w edytorze tekstu. Musisz znać Markdown, lekki język znaczników. Tu masz ściągawkę gdzie znajdziesz informację jak używać języka Markdown. + +Dodaj następującą linię na końcu `Contributors.md` + +``` +[Twoje imię](https://github.com/Twoja nazwa użytkownika) +``` +Przykład: +``` +[John Doe](https://github.com/johndoe) +``` + +Upewnij się że nie ma spacji pomiędzy `](`. Zapisz plik i następnie go zamknij. + +Jeżeli wejdziesz w folder ze swoim repozytorium i wykonasz komendę `git status`, zobaczysz, że są tam zmiany. Dodaj te zmiany do gałęzi którą właśnie utworzyłeś używając komendy `git add`: +``` +`git add Contributors.md` +``` + +Teraz zapisz te zmiany wykonując komendę `git commit`: +``` +git commit -m "Add to Contributors list" +``` +Zastąp `` swoim imieniem i nazwiskiem. + +## Wyślij zmiany na GitHub + +Wyślij swoje zmiany komendą `git push`: +``` +git push origin +``` +Zastąp `` nazwą gałęzi, którą wcześniej utworzyłeś. + +## Wyślij swoje zmiany do zatwierdzenia + +W swoim repozytorium na GitHubie znajdziesz przycisk `Compare & pull request`. Kliknij go. + +create a pull request + +Teraz wyślij prośbę o scalenie. + +submit pull request + +Niedługo dodam proponowane przez ciebie zmiany do głównej gałęzi projektu. Zostaniesz powiadomiony mailowo kiedy zmiany zostaną scalone. + +## Co dalej? + +Świętuj swoją pierwszą zmianę i podziel się nią z przyjaciółmi i obserwującymi poprzez aplikację. +Możesz dołączyć do naszego kanału slack w przypadku kiedy będziesz potrzebował pomocy albo miał jakieś pytania. Dołącz do slacka. +Możesz teraz zacząc uczestniczyć w innych projektach. Przygotowaliśmy listę projektów z prostymi zadaniami które będą dobre na początek. Sprawdź listę projektów. + +### [Materiały dodatkowe](https://github.com/Roshanjossey/first-contributions/blob/master/additional-material/git_workflow_scenarios/additional-material.md) + +## Ćwiczenia przy użyciu innych narzędzi + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.pt-pt.md b/translations/README.pt-pt.md new file mode 100644 index 00000000000..d0ae9f6b589 --- /dev/null +++ b/translations/README.pt-pt.md @@ -0,0 +1,106 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Primeiras Contribuições + +É difícil. É sempre difícil fazer algo pela primeira vez. Especialmente quando se está a colaborar, errar não é algo agradável. Mas *open source* (código aberto) trata-se de colaboração e de trabalharmos juntos. Queremos simplificar a forma com que novos colaboradores *open source* aprendem e contribuem pela primeira vez. + +Ler artigos e ver tutoriais pode ajudar, mas nada melhor do que realmente "pôr a mão na massa" sem estragar nada. Este projeto visa simplificar a forma com que os novatos fazem a sua primeira contribuição. Lembra-te: quanto mais relaxado(a) estiveres, melhor aprenderás. Se quiseres fazer a tua primeira contribuição, segue os passos abaixo. Nós prometemos, será divertido. + +fork deste repositorio + +Se ainda não tens o git na tua máquina, [instala-o aqui]( https://help.github.com/articles/set-up-git/ ). + +## Faz um Fork deste repositório + +Faz um Fork ao clicares no botão "Fork" no topo desta página. Isto vai criar uma cópia deste repositório na tua conta. + +## Clone o repositório + +clonar este repositório + +Agora clone este repositório para a tua máquina. Carrega no botão "Clone or download" e, em seguida, clica no ícone "Copy to clipboard" para copiar a URL. + +Abre o teu terminal e executa o comando seguinte: +``` +git clone "url que copiou" +``` +onde "url que copiou" (sem as aspas) é a URL deste repositório. Consulta as etapas anteriores para obter a URL. + +copiar URL + +Por exemplo: +``` +git clone https://github.com/este-eh-voce/first-contributions.git +``` +onde "este-eh-voce" é o seu usuário do GitHub. Aqui estas a copiar o conteúdo do repositório first-contributions para o teu computador. + +## Cria um Branch + +Vá para o diretório do repositório no teu computador (caso ainda não estejas lá): +``` +cd first-contributions +``` + +Agora cria um Branch usando o comando `git checkout`: +``` +git checkout -b +``` + +Por exemplo: +``` +git checkout -b add-alonzo-church +``` +Obs.: O nome do Branch não precisa de ter a sigla "add", mas neste caso é recomendável, porque a finalidade deste Branch é a de adicionar o teu nome a uma lista. + +## Efetua as alterações necessárias e faz um Commit + +Agora abre o ficheiro `Contributors.md` no teu editor de código, adiciona o teu nome nele e guarda o ficheiro. Se fores para o diretório do projeto e executar o comando `git status`, verás que há alterações. Adiciona essas alterações ao Branch que acabaste de criar utilizando o comando `git add`: +``` +git add Contributors.md +``` +Agora faz um Commit dessas alterações utilizando o comando `git commit`: +``` +git commit -m "Add to Contributors list" +``` +preenche `` com o teu nome ou nickname. + +## Faz um Push das alterações para o GitHub + +Faz um Push utilizando o comando `git push`: +``` +git push origin +``` +substitui `` pelo nome do Branch que criaste anteriormente. + +## Envia as tuas alterações para serem revistas + +Se fores para o teu repositório no GitHub, verás um botão `Compare & pull request`. Clica nesse botão. + +Cria um Pull Request + +Agora envia um Pull Request. + +Envia um pull request + +Logo estarei a incorporar as tuas mudanças no Branch principal (master) deste projeto. Vais receber um e-mail de notificação quando as alterações forem incorporadas. + +## Para onde ir a partir daqui? + +Celebra as tuas contribuições e partilha-as com amigos e seguidores através da [web app](https://roshanjossey.github.io/first-contributions/#social-share). + + Podes também juntar-te à nossa equipa no Slack caso precises de alguma ajuda ou tenhas alguma dúvida. [Junta-te à nossa equipa no Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Aqui estão alguns repositórios com Issues a nível de principiante em que tu podes ajudar a resolver. Vai em frente e clica nos repositórios para saber mais. + +### [ Material adicional ](../additional-material/translations/additional-material.pt_br.md) + +## Tutoriais com outras ferramentas + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.pt_br.md b/translations/README.pt_br.md new file mode 100644 index 00000000000..5fcbd46f584 --- /dev/null +++ b/translations/README.pt_br.md @@ -0,0 +1,117 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[Junte-se à nós no Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Primeiras Contribuições + +É difícil. É sempre difícil fazer algo pela primeira vez. Especialmente quando se está colaborando, cometer erros não é algo agradável. Mas *open source* (código aberto) se trata de colaboração e de trabalharmos juntos. Queremos simplificar a forma com que novos colaboradores *open source* aprendem e contribuem pela primeira vez. + +Ler artigos e ver tutoriais pode ajudar, mas o que é melhor do que realmente pôr a mão na massa em um ambiente prático? Este projeto visa guiar e simplificar a forma com que os novatos fazem a sua primeira contribuição. Se quiser fazer a sua primeira contribuição, siga os passos abaixo. + +#### *Se você não se sente confortável com linha de comando, [aqui estão alguns tutoriais de ferramentas gráficas.]( #tutoriais-com-outras-ferramentas)* + + +#### *Ler em [outros idiomas](../translations/Translations.md)* + +fork deste repositório + +Se não possui o git em sua máquina, [instale-o aqui]( https://help.github.com/articles/set-up-git/ ). + +## Faça um Fork deste repositório + +Faça um Fork clicando no botão "Fork" no topo desta página. Isto irá criar uma cópia deste repositório na sua conta. + +## Clone o repositório + +clonar este repositório + +Agora clone este repositório para a sua máquina. Clique no botão "Clone or download" e, em seguida, clique no ícone "Copy to clipboard" para copiar a URL. + +Abra seu terminal e execute o seguinte comando do git: +``` +git clone "url que copiou" +``` +onde "url que copiou" (sem as aspas) é a URL deste repositório. Consulte as etapas anteriores para obter a URL. + +copiar URL + +Por exemplo: +``` +git clone https://github.com/seu-usuario/first-contributions.git +``` +onde "seu-usuário" é o seu usuário do GitHub. Aqui você está copiando o conteúdo do repositório first-contributions para o seu computador. + +## Crie um Branch + +Vá para o diretório do repositório no seu computador (caso você não esteja lá): +``` +cd first-contributions +``` + +Agora crie um Branch usando o comando `git checkout`: +``` +git checkout -b +``` + +Por exemplo: +``` +git checkout -b add-alonzo-church +``` +Obs.: O nome do Branch não precisa ter a sigla "add", mas nesse caso é recomendável, porque a finalidade deste Branch é a de adicionar o seu nome a uma lista. + +## Efetue as alterações necessárias e faça um Commit + +Agora abra o arquivo `Contributors.md` em seu editor de código, adicione o seu nome a ele e salve o arquivo. + +git status + +Se você for para o diretório do projeto e executar o comando `git status`, verá que há alterações. Adicione essas alterações ao Branch que você acabou de criar utilizando o comando `git add`: +``` +git add Contributors.md +``` +Agora faça um Commit dessas alterações utilizando o comando `git commit`: +``` +git commit -m "Add to Contributors list" +``` +preenchendo `` com o seu nome. + +## Faça um Push das alterações para o GitHub + +Faça um Push utilizando o comando `git push`: +``` +git push origin +``` +substituindo `` pelo nome do Branch que você criou anteriormente. + +## Envie suas alterações para serem revisadas + +Se você for para o seu repositório no GitHub, verá um botão `Compare & pull request`. Clique nesse botão. + +Crie um Pull Request + +Agora envie um Pull Request. + +Envie o Pull Request + +Logo estarei mesclando ('mergeando') as suas mudanças no Branch principal (master) deste projeto. Você receberá um e-mail de notificação quando as alterações forem mescladas. + +## Para onde ir a partir daqui? + +Parabéns! Você completou o fluxo de trabalho básico _fork -> clone -> edit -> PR_ que você encontrará frequentemente como contribuidor! + +Celebre sua contribuição e compartilhe com seus amigos e seguidores no [app web](https://roshanjossey.github.io/first-contributions/#social-share). + +Você também pode se juntar à nossa equipe no Slack caso precise de alguma ajuda ou tenha alguma dúvida. [Junte-se à nossa equipe no Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Agora você pode colaborar com outros projetos. Nós compilamos uma lista de projetos com problemas simples que você pode começar. Verifique [a lista de projetos no web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [ Material adicional ](../additional-material/translations/additional-material.pt_br.md) + + +## Tutoriais usando outras ferramentas + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.ro.md b/translations/README.ro.md new file mode 100644 index 00000000000..10a898392f5 --- /dev/null +++ b/translations/README.ro.md @@ -0,0 +1,112 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Primele Contribuții + +Este greu. Este întotdeauna greu când faci ceva pentru prima dată. Mai ales când colaborezi. A face greșeli nu este un lucru confortabil. Dar cel mai important în open source este colaborarea și lucrul în echipă. Noi am vrut să simplificăm modul în care noii contribuabili în open source învață și contribuie pentru prima dată. + +Citirea articolelor și vizionarea tutorialelor poate ajuta, dar ce este mai bine decât să faci lucrurile fără a strica ceva? Acest proiect își propune să ofere îndrumare și simplificarea modului în care începătorii își fac prima contribuție. Amintește-ți: cu cât ești mai relaxat, cu atât mai bine înveți. Dacă dorești să faci prima ta contribuție, simplu urmați pașii de mai jos. Vă promit că va fi distractiv. + +#### *Citește în [alte limbi](Translations.md).* + +fork this repository + +Dacă nu ai git instalat, [ instalează-l ]( https://help.github.com/articles/set-up-git/ ). + +## Ramifică repozitoriul(depozit) + +Ramifică acest repo(depozit) făcând clic pe butonul fork locat pe partea de sus a paginii. +Acesta va creea o copie a repozitoriului în contul tău. + +## Clonează repozitoriul(depozit) + +clone this repository + +Acum clonează acest repo pe computerul tău. Fă clic pe butonul clone apoi clic pe *copiați în clipboard*. + +Deschideți un terminal și executați următoarea comanda git: + +``` +git clone "adresa copiată" +``` +Unde "adresa copiată" (Fără de ghilimele) este adresa repozitoriului. Vezi pașii anteriori pentru a obține adresa. + +copy URL to clipboard + +De exemplu: +``` +git clone https://github.com/acesta-ești-tu/prima-contribuție.git +``` +Unde `acesta-ești-tu` este numele tău GitHub. Aici tu copiezi conținutul repozitorului GitHub "prima-contribuție" pe computerul tău. + +## Creează o Ramură + +Schimbați directorul în repozitoriu pe computer (dacă nu sunteți deja acolo): + +``` +cd prima-contribuție +``` +Acum creați o ramură cu ajutorul comenzii `git checkout`: +``` +git checkout -b +``` + +De exemplu: +``` +git checkout -b adaug-alonzo-church +``` +(Numele ramurii nu e obligatoriu să fie *adaug*, dar e un lucru rezonabil pentru a include deoarece scopul acestei ramure este de a adăuga numele tău în lista!) + +## Fă schimbările necesare si comite aceste schimbări + +Acum deschide fișierul `Contributors.md` într-un editor de text (ca NotePad, Vim, nano, emacs, etc.), adaugă numele tău în el, apoi salvează fișierul. Dacă accesezi directorul de proiect și execuți comanda `git status`, vei vedea schimbări. Adaugă acele schimbări la ramura creată de tine cu comanda `git add`: +``` +git add Contributors.md +``` + +Acum comite acele schimbări cu comanda `git commit`: +``` +git commit -m "Adaug la lista de contribuitori" +``` +Schimbând `` cu numele tău. + +## Împinge Schimbările pe GitHub + +Împinge schimbările tale cu comanda `git push`: +``` +git push origin +``` +Schimbând `` cu numele ramurii create de tine anterior. + +## Trimite modificările pentru examinare + +Dacă pleci la repozitoriul tău de pe GitHub, vei vedea butonul `Compare & pull request`(Compară & trage cererea). Fă clic pe el. + +create a pull request + +Acum trimiteți solicitarea de tragere. + +submit pull request + +Curând eu voi îmbina toate schimbările în ramura principală a acestui proiect. Veți primi un e-mail de notificare odată ce schimbările au fost fuzionate. + +## De unde să mergi de aici? + +Sărbătoriți-vă contribuția și împărtășiți-o cu prietenii și adepții dvs. accesând [aplicația web](https://roshanjossey.github.io/first-contributions/#social-share). + +Ați putea să vă alăturați echipei noastre în cazul în care aveți nevoie de ajutor sau aveți întrebări. [Alătură-te echipei Slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Acum, să începem să contribuiți la alte proiecte. Am compilat o listă de proiecte cu probleme ușoare pe care le puteți începe. Verifică [lista de proiecte in aplicația web](https://roshanjossey.github.io/first-contributions/#project-list). + +### [ Materiale adiționale ](../additional-material/git_workflow_scenarios/additional-material.md) + + +## Tutoriale Folosind Alte Unelte + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.ru.md b/translations/README.ru.md new file mode 100644 index 00000000000..fe2a7a79620 --- /dev/null +++ b/translations/README.ru.md @@ -0,0 +1,151 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Первый вклад в проект + +Сложно. Всегда сложно начинать что-то с самого начала. Довольно неприятно совершать ошибки, особенно если вы работаете в команде. Весь open source состоит из сотрудничества и совместной работы. Мы хотим облегчить первые шаги в обучении и сотрудничестве начинающим разработчикам. + +Чтение статей и учебников может помочь, но что может быть лучше, чем настоящий практический опыт, без риска что-либо испортить. Цель этого проекта - должным образом направить молодых новобранцев, а также предоставить им возможность сделать их первый вклад. Помните: чем меньше вы напряжены, тем лучше вы учитесь. Если вы ищете возможность осуществить свой первый вклад, просто следуйте простым шагам, расположенным ниже. Обещаем, будет интересно. + +fork this repository + + +Если у вас не установлен git на компьютере, [ установите его ]( https://help.github.com/articles/set-up-git/ ) + +## Создайте ответвление + +Создайте собственное ответвление, нажав на кнопку `fork` сверху этой страницы. Таким образом вы создадите копию этого репозитория в своем аккаунте. + +## Клонируйте репозиторий + +clone this repository + +Теперь клонируйте ваш репозиторий на пк. Нажмите на кнопку `clone`, а затем на иконку `copy to clipboard`, чтобы скопировать ссылку. + +Откройте терминал и запустите следующую git команду: + +``` +git clone "url you just copied" +``` +Где "url you just copied" (без кавычек) это ссылка на ваш репозиторий. Посмотрите предыдущие шаги, чтобы получить эту ссылку. + +copy URL to clipboard + +Например: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +Где `this-is-you` ваш логин на github'e. Таким образом вы копируете репозиторий 'first-contributions' с GitHub на ваш пк. + +## Создайте ветвь + +Перейдите в каталог репозитория на вашем компьютере, если вы еще не там. + +``` +cd first-contributions +``` +Теперь создайте ветвь, с помощью `команды git checkout` + +``` +git checkout -b +``` + +Например: +``` +git checkout -b add-alonzo-church +``` +(Синтаксически не требуется, чтобы название ветви содержало слово *add*, но это оправдано, поскольку подчеркивает назначение этой ветви - добавить ваше имя в список.) + +## Внесите необходимые изменения и создайте коммит + +Теперь откройте файл `Contributors.md` в вашем текстовом редакторе, впишите ваше имя и сохраните файл. Если вы перейдете в директорию проекта и выполните `git status`, вы увидите изменения. Добавьте эти изменения с помощью команды `git add`. + +``` +git add Contributors.md +``` + +Теперь закоммитьте данные изменения с помощью команды `git commit`. +``` +git commit -m "Add to Contributors list" +``` +Измените `` на ваше имя + +## Запушьте изменения на github + +Запушьте ваши изменения с помощью `git push` +``` +git push origin +``` +Измените `` на имя ветви, которую вы создали ранее. + +## Подтвердите изменения для ревью + +Если вы зайдете в свой репозиторий на GitHub, вы увидите кнопку `Compare & pull request`. Нажмите на нее. + +create a pull request + +Теперь подтвердите пулл-реквест. + +submit pull request + +Скоро я произведу объединение всех ваших изменений с основной ветвью данного проекта. Вы получите сообщение по электронной почте, когда изменения будут приняты (смержены). + +Основная ветвь вашего репозитория не будет изменена. Для синхронизации выполните шаги, расположенные ниже. + +## Синхронизируйте ваше ответвление с данным репозиторием + +Прежде всего перейдите в основную ветвь: +``` +git checkout master +``` +Затем добавьте url моего репозитория в поле `upstream remote url`: +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` +Таким образом мы сообщим git'у, что существует другая версия данного проекта по определенной ссылке, и мы ее считаем мастером. Как только изменения смержены, подгрузите новую версию моего репозитория. +``` +git fetch upstream +``` + +Таким образом мы забрали все изменения в моем ответвлении (upstream remote). После, вам нужно смержить новую версию моего репозитория с вашей мастер-ветвью. +``` +git rebase upstream/master +``` +Так вы применяете все изменения, которые вы подтянули к вашей мастер-ветви. Если вы запушите сейчас мастер-ветвь, ваше ответвление тоже будет содержать изменения. +``` +git push origin master +``` +Обратите внимание, что вы пушите в удаленной репозиторий origin. + +На этом этапе я объединил вашу ветвь `` со своей мастер-ветвью, а вы объединили свою мастер-ветвь с моей. Ваша ветвь больше не нужна, вы можете удалить ее: +``` +git branch -d +``` +Так же можете удалить ее версию в удаленном репозитории: +``` +git push origin --delete +``` +Это совершенно не обязательно, но название этой ветви отражает ее довольно специфическое назначение. И продолжительность ее жизни может быть соответствующе короткой. + +## Использование других инструментов + +| GitHub Desktop | Visual Studio 2017 | GitKraken | +| ------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| [GitHub Desktop](../github-desktop-tutorial.md) | [Visual Studio 2017](../github-windows-vs2017-tutorial.md) | [GitKraken](../gitkraken-tutorial.md) | + + +## Что дальше? + +Ниже несколько популярных репозиториев, где вы можете найти задания для новичков. Вперед, перейдите в репозитории, чтобы узнать больше. + +| [![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22) | [![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22) | [![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie) | [](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22) | [![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22) | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22) | [Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22) | [habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie) | [numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22) | [elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22) | +| [![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) | [![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy) | [![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22) | [![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy) | [![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs) | [![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer) | [![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs) | +| [homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) | [Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy) | [vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22) | [Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy) | [OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy) | [PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs) | [coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer) | [moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs) | +| [![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22) | [![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22) | [![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) | [![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level) | [![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [](https://github.com/adobe/brackets/labels/Starter%20bug) | +| [ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22) | [freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22) | [hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only) | [pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22) | [neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level) | [babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) | [brackets](https://github.com/adobe/brackets/labels/Starter%20bug) | +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | [](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | [Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | diff --git a/translations/README.se.md b/translations/README.se.md new file mode 100644 index 00000000000..56f58e40ada --- /dev/null +++ b/translations/README.se.md @@ -0,0 +1,124 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# First Contributions + +Det är alltid svårt första gången man gör något och speciellt när du samarbetar med andra kan det vara extra känsligt att göra misstag. Vi vill förenkla för dig att lära sig hur man bidrar till ett öppet källkods-projekt. + +Att läsa artiklar och titta på handledningar kan så klart hjälpa men det är alltid bättre att göra det på riktigt. Detta projeket har som syfte att tillhandahålla en guide och göra det enkelt för nybörjare att göra sina första bidrag. Om du är ute efter att göra ditt första bidrag kan du följa stegen nedan. + + +#### *Om du inte känner dig bekväm med kommandoraden, [så finns en vägledning här.]( #tutorials-using-other-tools )* + +#### *Läs detta på [andra språk](../Translations.md).* + +fork this repository + +Om du inte har git installerat [så installera det]( https://help.github.com/articles/set-up-git/ ) + +## Gör en Fork på detta repository + +Forka repot genom att klicka på fork-knappen överst på denna sida. +Detta kommer att skapa en kopia av repot i ditt GitHub-konto. + +## Klona repository + +clone this repository + +Klona repot till din dator. Gå till ditt GitHub-konto och klicka på clone-knappen och klicka sedan på *copy to clipboard*-ikonen. + +Öppna en terminal och kör följande kommando: + +``` +git clone "url you just copied" +``` +där "url you just copied" (utan citat-tecken) är URL:en för detta repo (din fork för detta projekt). Se föregående steg för att hitta URL:en. + +copy URL to clipboard + +Till exempel: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +där `this-is-you` är ditt användarnamn på GitHub. På detta sätt kopierar du innehållet i repot till din dator. + +## Skapa en branch + +Gå till repo-katalogen på din dator (om du inte redan står i den katalogen): + +``` +cd first-contributions +``` + +Nu skapar du en branch genom att använda `git checkout`-kommandot: +``` +git checkout -b +``` + +Till exempel: +``` +git checkout -b mitt-tillag +``` + +## Gör de ändringar du vill göra och commita dem + +Nu öppnar du `Contributors.md` i en text-editor och lägger till ditt namn. Lägg inte till något i början eller slutet av dokumentet utan lägg till någonstans mitt emellan. Spara filen. + +git status + +Ge kommando `git status` i projektkatalogen för att se de ändringar du gjort. + + +Lägg till dina ändringar genom att använda kommando `git add -A`: + +``` +git add -A +``` + +Commita dina ändringar genom att använda `git commit`: +``` +git commit -m "Add to Contributors list" +``` +ersätt `` med ditt namn. + +## Pusha ändringar till GitHub + +Pusha dina ändringar genom att använda kommando `git push`: +``` +git push origin +``` +ersätt `` med det branch-namn du använt tidigare. + +## Skicka iväg dina ändringar för granskning + +Om du navigerar till ditt repo på GitHub kan du se en knapp med texten `Compare & pull request`. Klicka på den. + +create a pull request + +Skicka iväg din s.k. pull request. + +submit pull request + +Snart kommer jag införa dina ändringar i huvudprojektet. Du kommer att få ett e-mail så fort dina ändringar blivit införda. + +## Hur går man vidare? + +Gratulerar! Du har just genomfört standardprocessen för _fork -> clone -> edit -> PR_, en process du kommer att stöta på ofta! + +Fira genom att dela med dina vänner och följare genom att gå till [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Behöver du hjälp eller vill ställa frågor kan du gå med i vår slack-grupp. [Gå med i slack-gruppen](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Nu kan du gå vidare genom att bidra i andra projekt. Vi har sammanställt en lista med enkla uppgifter som du kan starta med. Kolla in [projektlistan i webbapplikationen](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Ytterligare material](additional-material/git_workflow_scenarios/additional-material.md) + + +## Handledningar för andra verktyg + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)| diff --git a/translations/README.sl.md b/translations/README.sl.md new file mode 100644 index 00000000000..2206a45be4f --- /dev/null +++ b/translations/README.sl.md @@ -0,0 +1,126 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Prvi prispevek + +Vsak začetek je težak. Ko sodeluješ z drugimi, so napake še veliko bolj neprijetne. Zato smo se odločili, da novincem olajšamo prispevanje k odprti kodi (ang. Open source). + +Branje člankov in sledenje vodičem lahko pomaga, vendar je še vedno najbolje da nove veščine vadimo sami v varnem okolju. Namen tega projekta je da novince vodi in jim olajša prvi prispevek k odprti kodi. Če želite narediti prvi prispevek, sledite spodnjim korakom. + +Angleški izrazi so v oklepajih, da dodajo kontekst vsebini. + +#### *Če se ne počutite dobro v ukazni vrstici (ang. command line), so tukaj [navodila za uporabo orodij z grafičnim vmesnikom.]( #vodiči-za-uporabo-drugih-orodij )* + +#### *Preberite ta navodila v [drugih jezikih](../Translations.md).* + +[🇮🇳](README.hi.md) [🇲🇲](README.mm_unicode.md) [🇮🇩](README.id.md) [🇫🇷](README.fr.md) [🇪🇸](README.es.md) [🇳🇱](README.nl.md) [🇷🇺](README.ru.md) [🇯🇵](README.ja.md) [🇻🇳](README.vn.md) [🇵🇱](README.pl.md) [🇮🇷](README.fa.md) [🇮🇷](README.fa.en.md) [🇰🇷 🇰🇵](README.ko.md) [🇩🇪](README.de.md) [🇨🇳](README.chs.md) [🇹🇼](README.cht.md) [🇬🇷](README.gr.md) [🇺🇦](README.ua.md) [🇧🇷](README.pt_br.md) [🇵🇹](README.pt-pt.md) [🇮🇹](README.it.md) [🇹🇭](README.th.md) [🏴󠁥󠁳󠁧󠁡󠁿](README.gl.md) [🇵🇰](README.ur.md) [:bangladesh:](README.bn.md) [🇲🇩 🇷🇴](README.ro.md) [🇹🇷](README.tr.md) [🇸🇪](README.se.md) [🇮🇱](README.hb.md) +[🇷🇸](translations/README.sr.md) + + +fork this repository + +Če na svojem računalniku še nimaš "git", si ga [naloži]( https://help.github.com/articles/set-up-git/). + +## Ustvari svojo različico repository-ja ( Fork this repository ) + +S pritiskom na gumb "Fork" na vrhu te strani, ustvari svojo različico repositorya ( pogosto skrajšano v "repo" ) v svojem GitHub računu. + +## Kloniraj ta repository ( Clone the repository ) + +clone this repository + +Sedaj kloniraj ta repository na svoj računalnik. Pojdi v svoj GitHub račun in poišči svojo različico tega repositorya, klikni na gumb "Clone or download" in si kopiraj povezavo. Lahko uporabiš "Ctrl+C" ali pa klikni na ikono na desni strani povezave *copy to clipboard*. + +Odpri terminal in se postavi v direktorij, v katerem želiš imeti svojo kopijo repositorya. Nato zaženi naslednji ukaz: + +``` +git clone "url naslov, ki si ga ravno skopiral" +``` +"url naslov, ki si ga ravno skopiral" (brez navednic) je naslov, ki si ga skopiral na Githubu ( naslov tvoje različice projekta ). Glej prejšne korake da dobiš url naslov. + +copy URL to clipboard + +Primer: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +`this-is-you` je tvoje GitHub uporabniško ime. Ta ukaz skopira vsebino repositorya "first-contributions" z GitHuba v tvoj računalnik. + +## Ustvari vejo ( Create a branch ) + +Prestavi se v direktorij repositorya na svojem računalniku (če še nisi v njem): + +``` +cd first-contributions +``` +Sedaj ustvari vejo z uporabo ukaza `git checkout`: +``` +git checkout -b +``` + +Primer: +``` +git checkout -b add-janez-novak +``` +(Ni potrebno da je v imenu veje *add*, vendar je v tem primeru smiselno, ker je namen veje da dodaš svoje ime na seznam.) + +## Naredi spremembe in izvedi commmit teh sprememb ( Make necessary changes and commit those changes ) + +Odpri datoteko `Contributors.md` v urejevalniku besedila in dodaj svoje ime. Ne dodajaj ga na začetek ali konec datoteke, dodaj ga nekje vmes. Shrani datoteko. + +git status + +Če se postaviš v direktorij projekta in izvedeš ukaz `git status`, vidiš da obstajajo spremembe v projektu. + + +Dodaj te spremembe veji, ki si jo ravno ustvaril, z ukazom `git add`: + +``` +git add Contributors.md +``` + +Sedaj izvedi commit teh sprememb z ukazom `git commit`: +``` +git commit -m "Add to Contributors list" +``` +Zamenjaj `` s svojim imenom. Tekst med navednicami je komentar spremembe, ki se shrani s spremembo. + +## Pošlji spremembe na GitHub ( Push changes to GitHub ) + +Pošlji svoje spremembe z ukazom `git push`: +``` +git push origin +``` +Zamenjaj `` z imenom veje, ki si jo ustvaril. + +## Vloži svoje spremembe v pregled ( Submit your changes for review ) + +Če preveriš svoj repository na GitHubu, vidiš gumb `Compare & pull request`. Klikni na ta gumb. + +create a pull request + +Sedaj izvedi submit svojega pull requesta. + +submit pull request + +Kmalu bom združil tvoje spremembe v master vejo tega projekta. V svoj e-poštni nabiralnik boš dobil sporočilo, da so bile spremembe združene. + +## Kako nadaljevati? ( Where to go from here? ) + +Čestitke! Pravkar si končal običajni _fork -> clone -> edit -> PR_ potek dela, ki ga boš srečal kot sodelavec v odprto kodnih projektih! + +Lahko se pridružiš naši slack ekipi, če rabiš pomoč ali imaš vprašanja. [Pridruži se slack ekipi](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Sedaj lahko začneš prispevati drugim projektom. Sestavili smo seznam projektov z enostavnimi problemi (issues), ki jih lahko začneš reševati. Preveri [seznam projektov v spletni aplikaciji](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Dodatne informacije](../additional-material/translations/additional-material.sl.md) + + +## Vodiči za uporabo drugih orodij + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| diff --git a/translations/README.slk.md b/translations/README.slk.md new file mode 100644 index 00000000000..bbffc2bd367 --- /dev/null +++ b/translations/README.slk.md @@ -0,0 +1,122 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Prvé príspevky + +Je to ťažké. Je to vždy ťažké, keď niečo robíš prvýkrát. Najmä vtedy, keď spolupracuješ, robiť chyby nie je pohodlná vec. Chceli sme zjednodušiť spôsob, akým sa noví prispievatelia do open source učia a prispievajú prvýkrát. + +Čítanie článkov a sledovanie tutoriálov môže pomôcť, ale čo je lepšie, ako skutočne robiť veci v skúšobnom prostredí? Cieľom tohto projektu je poskytnúť usmernenie a zjednodušiť spôsob, akým prvýkrát prispievajú začiatočníci. Ak máš záujem o prvý príspevok, postupuj podľa nižšie uvedených krokov. + +#### *Ak sa ti nedarí s príkazovým riadkom, [tu sú návody s nástrojmi grafického rozhrania.]( #návody-pomocou-iných-nástrojov )* + +fork this repository + +Ak nemáš na svojom počítači git, [nainštaluj ho]( https://help.github.com/articles/set-up-git/). + +## Skopíruj toto úložisko + +Skopíruj toto úložisko kliknutím na tlačidlo vidlice(fork) v hornej časti tejto stránky. +Tým sa vytvorí kópia tohto úložiska na tvojom účte. + +## Stiahni toto úložisko + +clone this repository + +Teraz stiahni toto úložisko do tvojho zariadenia. Prejdi do tvojho účtu GitHub, otvor skopírované úložisko, klikni na tlačidlo klonovania a potom klikni na ikonu * kopírovať do schránky *. + +Otvor terminál a spusti nasledujúci git príkaz: + +``` +git clone "adresa, ktorú si práve skopíroval" +``` +kde "adresa ktorú si práve skopíroval" (bez úvodzoviek) je adresa URL tohto úložiska (tvoja kópia tohto projektu). Pozri si predchádzajúce kroky na získanie adresy URL. + +copy URL to clipboard + +Napríklad: +``` +git clone https://github.com/toto-si-ty/prve-prispevky.git +``` +kde `toto-si-ty` je tvoje GitHub užívateľské meno. Tu skopíruješ obsah GitHub úložiska prve-prispevky do tvojho počítača. + +## Vytvor vetvu + +Prejdi do adresára úložiska v tvojom počítači (ak ešte nie si tam): + +``` +cd prve-prispevky +``` +Teraz vytvor vetvu pomocou príkazu `git checkout`: +``` +git checkout -b +``` + +Napríklad: +``` +git checkout -b pridaj-ferko-mrkvicka +``` +(Názov pobočky nemusí obsahovať slovo * pridaj *, ale je rozumné pridať ho, pretože účelom tejto pobočky je pridať tvoje meno do zoznamu.) + +## Vykonaj potrebné zmeny a potvrď tieto zmeny + +Teraz otvor súbor `Contributors.md` v textovom editore a pridaj do neho svoje meno. Nepridávaj ho na začiatok alebo na koniec súboru. Daj ho kdekoľvek medzi tým. Teraz súbor ulož. + +git status + +Ak prejdeš do adresára projektu a vykonáš príkaz `git status`, uvidíš zmeny. + +Pridaj tieto zmeny do vetvy, ktorú si práve vytvoril, pomocou príkazu `git add`: + +``` +git add Contributors.md +``` + +Teraz vykonaj tieto zmeny pomocou príkazu `git commit`: +``` +git commit -m "Pridaj do zoznamu pripievateľov" +``` +nahraď `` tvojim menon. + +## Nahraj zmeny na GitHub + +Nahraj svoje zmeny pomocou príkazu `git push`: +``` +git push origin +``` +nahraď `` názvom vetvy, ktorú si vytvoril skôr. + +## Odošli svoje zmeny na kontrolu + +Ak prejdeš do tvojho úložiska v službe GitHub, zobrazí sa tlačidlo `Compare & pull request`. Klikni na toto tlačidlo. + +create a pull request + +Teraz predlož požiadavku na vytiahnutie. + +submit pull request + + +Čoskoro budem zlučovat všetky vaše zmeny do hlavnej pobočky tohto projektu. Po zlúčení zmien dostaneš upozornenie. + +## Kam ísť odtiaľto? + +Gratulujem! Práve si dokončil štandardný _fork -> klon -> upraviť -> PR_ pracovný postup, ktorý sa často stretneš ako prispievateľ! + +Osláv svoj príspevok a zdieľaj ho so svojimi priateľmi a nasledníkmi [web app](https://roshanjossey.github.io/first-contributions/#social-share). + +Môžeš sa pripojiť k nášmu slack tímu v prípade, že potrebuješ nejakú pomoc alebo máš nejaké otázky. [Join slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Teraz začni s účasťou na iných projektoch. Vytvorili sme zoznam projektov s jednoduchými problémami, s ktorými môžeš začať. Pozri [zoznam projektov vo webovej aplikácii](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Dodatočný materiál](additional-material/git_workflow_scenarios/additional-material.md) + + +## Návody pomocou iných nástrojov + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.sr.md b/translations/README.sr.md new file mode 100644 index 00000000000..3a79ce011ee --- /dev/null +++ b/translations/README.sr.md @@ -0,0 +1,173 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Prvi prilog + +Teško je. Prvi pokušaj je uvek težak. Kada sarađuješ sa drugima, napraviti greške je utoliko strašnije. Želeli bismo da olakšamo proces kroz koji novi programeri koji doprinose otvorenom softveru (eng. open source) uče i doprinose po prvi put. + +Iako blogovi i tutorijali mogu da pomognu, ništa nije bolje nego uzeti stvari u svoje ruke i zaista doprinositi u trening-sredini. Ovaj projekat ima za cilj da pruži konkretne korake i olakša način na koji početnici prilažu svoje prve doprinose (eng. contributions). Ukoliko ste se prepoznali u tekstu iznad, pratite sledeće korake. + + +#### *Ako vam je nezgodno da čitate tekst u komandnoj liniji, [evo linka kroz GUI alate.]( #tutorials-using-other-tools )* + +#### *Možete čitati tekst i na [drugim jezicima](translations/Translations.md).* + +[🇮🇳](translations/Translations.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[🇧🇬](translations/README.bg.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇳🇵](translations/README.np.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[🇲🇾](translations/README.my.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇵🇭](translations/README.tl.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇱🇻](translations/README.lv.md) +[🇷🇸](translations/README.sr.md) + + + +Napravite fork repozitorijuma + +Ukoliko nemati git instaliran na vašoj mašini, [instalirajte ga ovde]( https://help.github.com/articles/set-up-git/). + +## Napravite fork repozitorijuma + +Napravite račvanje (fork) tako što ćete kliknuti na dugme *fork* na vrhu stranice. Ovako pravite kopiju repozitorijuma na vašoj strani. + +## Klonirajte repozitorijum + +clone this repository + +Sledeće, klonirajte repozitorijum koji ste prethodno račvali. Posetite svoj GitHub profil, otvorite repozitorijum koji ste račvali, kliknite na *clone* dugme i kliknite na ikonicu *copy to clipboard*. + +Otvorite terminal i upišite sledeće git komande: + +``` +git clone "url you just copied" +``` +Umesto "url you just copied" (bez navodnika i razmaka) upišite url repozitorijuma koji ste kopirali u prethodnom koraku. + +copy URL to clipboard + +Na primer: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +Gde je umesto `this-is-you` upisano vaše korisničko ime. Ovim kopirate sadržaj repozitorijuma *first-contributions* na vašu mašinu. + +## Pravljenje grane *branch* + +Prebacite se u radni rirektorijum na vašoj mašini: +``` +cd first-contributions +``` +Pa zatim napravite novo grananje *branch* koristeći `git checkout` comandu: +``` +git checkout -b +``` + +Na primer: +``` +git checkout -b add-alonzo-church +``` +(Naziv grane ne mora da sadrži *add* na početku, ali je zgodno uključiti ga jer je svrha ove grane da doda vaše ime na listu. + +## Napravite potrebne izmene i potvrdite promene + +Otvorite `Contributors.md` fajl u tekst editoru i dodajte vaše ime. Nemojte dodavati ime na sam početak ili kraj. Stavite ga negde u sredinu. Potom sačuvajte fajl. + +git status + +Ukoliko odete u radni direktorijum i izvršite komandu `git status`,primetićete da postoje promene. + +Dodajte ove promene u granu koju ste gore napravili koristeći `git add` komandu: + +``` +git add Contributors.md +``` + +Sada potvrdite ove promene koristeći `git commit` komandu: +``` +git commit -m "Add to Contributors list" +``` +Gde umesto `` upisujete svoje ime. + +## Push changes to GitHub + +Pošaljite izmene u repozitorijum na GitHub nalogu `git push`: +``` +git push origin +``` +gde umesto `` stavljate ime vašeg grananja. + +## Pošaljite izmene na reviziju + +Ukoliko odete na repoyitorijum na vašem GitHub nalogu primetićete `Compare & pull request` Dugme. Kliknite na njega. + +create a pull request + +a potom pošaljite zahtev klikom na dugme *submit*. + +submit pull request + +Nakon toga, ja ću spojiti promene koje ste napravili sa master granom projekta. Dobićete mejl potvrde kada se grane spoje. + +## Šta dalje? + +Čestitamo! Završili ste standardni _fork -> clone -> edit -> PR_ tok koji će vas pratiti kroz vaš čitav programerski život! + +Proslavite tako što ćete podeliti vaš doprinos sa prijateljima i pratiocima otvaranjem [stranice](https://firstcontributions.github.io/#social-share). + +Pridružite se i našem Slack timu u slučaju da vam je potrebna ikakva pomoć ili imate bilo kakvih pitanja. [Slack tim](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM). + +A sada, možemo početi sa doprinosima drugim projektima. Napravili smo spisak projekata sa jednostavnim problemima na kojima možete početi da radite. Posetite stranicu sa [the list of projects na našem sajtu](https://firstcontributions.github.io/#project-list). + +### [Dodatni materijali](additional-material/git_workflow_scenarios/additional-material.md) + + +## Uputstva za druge alate + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code|Sourcetree App| +|---|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)|[Atlassian Sourcetree](sourcetree-macos-tutorial.md)| diff --git a/translations/README.ta.md b/translations/README.ta.md new file mode 100644 index 00000000000..0c32f01aea8 --- /dev/null +++ b/translations/README.ta.md @@ -0,0 +1,135 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# முதல் பங்களிப்புகள் + +இது கடினம். நீங்கள் ஏதாவது முதல் தடவை செய்யும் போது அது எப்போதும் கடினம். குறிப்பாக நீங்கள் இங்கு குழுவாக ஒத்துழைக்கும்போது, தவறு செய்வது என்பது சாதாரண விஷயமே. முதல் தடவை பங்களிப்போர் கற்றுக்கொள்ளவும் மேலும் பங்களிப்பு செய்வதை இலகுவாக்குவதே எங்களுக்கு தேவையாக உள்ளது. + +கட்டுரைகளைப் படிப்பதும், பயிற்சிகளைப் பார்ப்பதும் உதவக்கூடும், ஆனால் நடைமுறைச் சூழலில் விஷயங்களைச் செய்வதை விட சிறந்தது என்ன? இந்த திட்டம் வழிகாட்டுதல்களை வழங்குவதையும், ஆரம்பநிலை பங்களிப்பாளர்களை அவர்களின் முதல் பங்களிப்பை எளிதாக்குவதையும் நோக்கமாகக் கொண்டுள்ளது. உங்கள் முதல் பங்களிப்பை வழங்க விரும்பினால், கீழே உள்ள வழிமுறைகளை பின்பற்றவும். + +#### *command line உங்களுக்கு வசதியாக இல்லை என்றால், [இங்கே GUI tools ஐ பயன்படுத்தி பயிற்சிகள் உள்ளன.]( #tutorials-using-other-tools )* + +இந்த repository ஐ fork செய்யவும் + +உங்கள் கணினியில் git இல்லை என்றால், [install செய்யவும்](https://help.github.com/articles/set-up-git/). + +## இந்த repository ஐ fork செய்தல் + + +இந்த பக்கத்தின் மேலே உள்ள fork பொத்தானைக் கிளிக் செய்வதன் மூலம் செயட்படுத்தலாம். +இது உங்கள் account இல் ஒரு copy ஐ உருவாக்கும். + +## இந்த repository ஐ clone செய்தல் + +இந்த repository ஐ clone செய்யவும் + +இப்போது உங்கள் கணினியில் fork செய்யப்பட்ட repository ஐ clone செய்யவும். உங்கள் GitHub கணக்கிற்குச் சென்று, forked செய்யப்பட்ட repository ஐ open செய்து clone பொத்தானைக் கிளிக் செய்து copy to clipboard கிளிக் செய்வதன் மூலம் நிறைவேற்றலாம். + +terminal ஐ open செய்து பின்வரும் git கட்டளையை இயக்கவும்: + +``` +git clone "நீங்கள் copy செய்த url" +``` + +copy URL to clipboard + + +உதாரணத்திற்கு: + +``` +git clone https://github.com/இது நீங்கள்/first-contributions.git +``` + +இங்கு `இது நீங்கள்` என்பது GitHub username என்பதாகும். இதன் மூலம் நீங்கள் first-contributions repository இன் பிரதி ஒன்றை உங்கள் GitHub கணக்கில் செயட்படுத்துகிறீர்கள். + +## கிளையொன்றை உருவாக்குதல் + +repository directory இட்கு செல்லவும்(நீங்கள் ஏற்கனவே இல்லையென்றால்): + +``` +cd first-contributions +``` + + +இப்போது `git checkout` கட்டளையைப் பயன்படுத்தி ஒரு கிளையை உருவாக்கவும்: + +``` +git checkout -b +``` + +உதாரணத்திற்கு: + +``` +git checkout -b add-luke-oliff +``` + +(கிளையின் பெயருக்கு அதில் *add* சேர்க்க வேண்டிய அவசியமில்லை, ஆனால் இது ஒரு நியாயமான விஷயம், ஏனெனில் இந்த கிளையின் நோக்கம் உங்கள் பெயரை ஒரு பட்டியலில் சேர்ப்பதுதான்.) + +## தேவையான மாற்றங்களைச் செய்து அந்த மாற்றங்களை commit செய்யுங்கள் + +இப்போது text editor இல் `Contribitors.md` கோப்பைத் திறந்து, அதில் உங்கள் பெயரைச் சேர்க்கவும். கோப்பின் தொடக்கத்திலோ அல்லது முடிவிலோ இதைச் சேர்க்க வேண்டாம். இடையில் எங்கும் வைக்கவும். இப்போது, ​​கோப்பை சேமிக்கவும். + +git status + +நீங்கள் project directory சென்று `git status` இயக்கினால், மாற்றங்கள் இருப்பதை நீங்கள் காண்பீர்கள். + + +`git add` கட்டளையைப் பயன்படுத்தி நீங்கள் உருவாக்கிய கிளையில் அந்த மாற்றங்களைச் சேர்க்கவும்: + +``` +git add Contributors.md +``` + +இப்போது `git commit` கட்டளையைப் பயன்படுத்தி அந்த மாற்றங்களைச் செய்யுங்கள்: + +``` +git commit -m "Add <உங்கள்_பெயர்> to Contributors list" +``` + +`உங்கள்_பெயர்` என்ற இடத்தில் உங்கள் பெயரை கொடுங்கள். + +## மாற்றங்களை GitHub இட்கு push செய்தல் + +`git push` கட்டளையைப் பயன்படுத்தி உங்கள் மாற்றங்களைத் தள்ளுங்கள்: + +``` +git push origin +``` + + +`` ஐ நீங்கள் முன்பு உருவாக்கிய கிளையின் பெயருடன் மாற்றுங்கள். + +## உங்கள் மாற்றங்களை மதிப்பாய்வுக்கு சமர்ப்பிக்கவும் + + +GitHub இல் உள்ள உங்கள் களஞ்சியத்திற்குச் சென்றால், `Compare & pull request` கோரிக்கை பொத்தானைக் காண்பீர்கள். அந்த பொத்தானைக் கிளிக் செய்க. + +create a pull request + +இப்போது இழுக்கும் கோரிக்கையை சமர்ப்பிக்கவும். + +submit pull request + +விரைவில் உங்கள் எல்லா மாற்றங்களையும் இந்த திட்டத்தின் முதன்மை கிளையில் இணைக்கப்படும். மாற்றங்கள் ஒன்றிணைக்கப்பட்டவுடன் உங்களுக்கு அறிவிப்பு மின்னஞ்சல் கிடைக்கும். + +## இங்கிருந்து எங்கு செல்வது? + +வாழ்த்துக்கள்! நீங்கள் ஒரு பங்களிப்பாளராக அடிக்கடி சந்திக்கும் _fork -> clone -> edit -> PR_ பணிப்பாய்வு முடித்துவிட்டீர்கள். + + +உங்கள் பங்களிப்பைக் கொண்டாடுங்கள் மற்றும் உங்கள் நண்பர்கள் மற்றும் பின்தொடர்பவர்களுடன் [web app](https://roshanjossey.github.io/first-contributions/#social-share) சென்று பகிர்ந்து கொள்ளுங்கள். + +உங்களுக்கு ஏதேனும் உதவி தேவைப்பட்டால் அல்லது ஏதேனும் கேள்விகள் இருந்தால் எங்கள் slack team இல் இணையலாம். [Join our slack crew](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +இப்போது மற்ற திட்டங்களுக்கு பங்களிப்பதன் மூலம் தொடங்குவோம். நீங்கள் தொடங்கக்கூடிய எளிதான சிக்கல்களுடன் திட்டங்களின் பட்டியலை நாங்கள் தொகுத்துள்ளோம். பாருங்கள் [the list of projects in the web app](https://roshanjossey.github.io/first-contributions/#project-list). + +### [கூடுதல் வளங்கள்](../additional-material/git_workflow_scenarios/additional-material.md) + +## பிற கருவிகளைப் பயன்படுத்தி பயிற்சிகள் + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| diff --git a/translations/README.te.md b/translations/README.te.md new file mode 100644 index 00000000000..6f8acec0f69 --- /dev/null +++ b/translations/README.te.md @@ -0,0 +1,163 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# మొదటి విరాళములు + +అది కష్టం. అది ఏదో మొదటిసారి ఎల్లప్పుడూ కష్టం. ముఖ్యంగా మీరు సహకరించినప్పుడు, తప్పులు చేయడం అనేది ఒక సౌకర్యవంతమైన విషయం కాదు. కొత్త ఓపెన్ సోర్స్ కంట్రిబ్యూటర్లను తెలుసుకోవడానికి & మొదటిసారిగా దోహదపడే విధంగా మేము సరళీకృతం చేయాలనుకుంటున్నాము. + +వ్యాసాలు చదవడం & చూడటం ట్యుటోరియల్స్ సహాయపడతాయి, కానీ వాస్తవంగా ఆచరణాత్మక వాతావరణంలో stuff చేస్తున్నదాని కంటే మెరుగైనది ఏమిటి? మార్గదర్శిని అందించడం మరియు ప్రారంభకులకు వారి మొదటి సహకారాన్ని సులభతరం చేయడం ఈ ప్రాజెక్ట్ లక్ష్యం. మీరు మీ మొదటి సహకారం చేయాలని చూస్తే, క్రింది దశలను అనుసరించండి. + +#### *మీకు ఆదేశ పంక్తితో సౌకర్యంగా లేకపోతే, [ఇక్కడ GUI సాధనాలను ఉపయోగించి ట్యుటోరియల్స్ ఉన్నాయి.]( #tutorials-using-other-tools )* + +#### *దీనిని [ఇతర భాషల్లో] చదవండి(translations/Translations.md).* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇳🇵](translations/README.np.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇷🇸](translations/README.sr.md) + + + + +fork this repository + +మీకు మీ కంప్యూటరులో GIT లేకపోతే, [దీనిని ఇన్స్టాల్ చేయండి]( https://help.github.com/articles/set-up-git/). + +## ఫోర్క్ ఈ రిపోజిటరీ + +ఫోర్క్ ఈ రిపోజిటరీ ఈ పేజీ ఎగువ భాగంలో ఫోర్క్ బటన్ పై క్లిక్ చేయడం ద్వారా క్లిక్ చేయండి. +ఇది మీ ఖాతాలో ఈ రిపోజిటరీ కాపీని సృష్టిస్తుంది. + +## రిపోజిటరీ క్లోన్ + +clone this repository + +ఇప్పుడు మీ కంప్యూటరులో ఫోర్క్ రిపోను క్లోన్ చేయండి. మీ GitHub ఖాతాకు వెళ్లండి, ఫోర్క్ రెపోని తెరిచి, క్లోన్ బటన్పై క్లిక్ చేసి, ఆపై * కాపీ * క్లిప్బోర్డ్కు క్లిక్ చేయండి. + +టెర్మినల్ తెరిచి కింది git ఆదేశాన్ని అమలు చేయండి: +``` +git clone "url మీరు కాపీ చేసారు" +``` +ఇక్కడ "url మీరు కాపీ" (కోట్ మార్కులు లేకుండా) ఈ రిపోజిటరీ కు URL (ఈ ప్రాజెక్టు మీ ఫోర్క్). Url ను పొందడానికి మునుపటి దశలను చూడండి. +copy URL to clipboard + +ఉదాహరణకి: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +ఇక్కడ 'this-is-you' మీ GitHub వినియోగదారు పేరు. ఇక్కడ మీరు మొదటి-రచన రిపోజిటరీ యొక్క కంటెంట్లను GitHub లో మీ కంప్యూటర్కు కాపీ చేస్తున్నారు. + +## ఒక శాఖను సృష్టించండి + +మీ కంప్యూటర్లో రిపోజిటరీ డైరెక్టరీకి మార్చండి (మీరు ఇప్పటికే లేకపోతే): + +``` +cd first-contributions +``` +ఇప్పుడు 'git checkout' ఆదేశం ఉపయోగించి ఒక శాఖను సృష్టించండి: + + +ఉదాహరణకి: +``` +git checkout -b add-alonzo-church +``` +(బ్రాంచ్ యొక్క పేరు దానిలో పదం * add * ను కలిగి ఉండవలసిన అవసరం లేదు, కానీ చేర్చడానికి సహేతుకమైన విషయం ఎందుకంటే ఈ శాఖ యొక్క ఉద్దేశ్యం జాబితాకు మీ పేరును జోడించడం.) + +## అవసరమైన మార్పులు చేసి, ఆ మార్పులను నిరూపించండి + +టెక్స్ట్ ఎడిటర్లో ఇప్పుడు ఓపెన్ `Contributors.md` ఫైల్, దానికి మీ పేరుని జోడించండి. ఫైల్ ప్రారంభంలో లేదా ముగింపులో జోడించవద్దు. మధ్యలో ఎక్కడైనా ఉంచండి. ఇప్పుడు, ఫైల్ను సేవ్ చేయండి. + +git status + + +మీరు ప్రాజెక్ట్ డైరెక్టరీకి వెళ్లి `git status` ఆదేశాన్ని అమలు చేస్తే, మార్పులు ఉన్నాయి అని మీరు చూస్తారు. + +`Git add` కమాండ్ను ఉపయోగించి మీరు సృష్టించిన బ్రాంచ్లో ఈ మార్పులను జోడించండి: +``` +git add Contributors.md +``` + +ఇప్పుడు ఆ మార్పులను 'git commit' ఆదేశం ఉపయోగించి కట్టుకోండి: +``` +git commit -m "Add to Contributors list" +``` +`` తొలగించు మరియు మీ పేరును జోడించండి. + +## మార్పులను GitHub కు పంపండి + +కమాండ్ ఉపయోగించి మీ మార్పులను పంపండి `git push`: +``` +git push origin +``` +మీరు ముందుగా సృష్టించిన బ్రాంచీ పేరుతో `` ను జోడించుము. + +## సమీక్ష కోసం మీ మార్పులను సమర్పించండి + +మీరు GitHub లో మీ రిపోజిటరీకి వెళ్లినట్లయితే, మీరు 'Compare & pull request' బటన్ను చూస్తారు. ఆ బటన్పై క్లిక్ చేయండి. + +create a pull request + +ఇప్పుడు పుల్ అభ్యర్థనను సమర్పించండి. + +submit pull request + +త్వరలో నేను మీ అన్ని మర్పులను ఈ ప్రాజెక్ట్ యొక్క ప్రధాన విభాగానికి విలీనం చేస్తాను. మార్పులు విలీనం అయిన తర్వాత మీరు ఒక నోటిఫికేషన్ ఈమెయిల్ పొందుతారు. + +## ఇక్కడ నుండి ఎక్కడికి వెళ్లాలి? + +అభినందనలు! మీరు standard _fork -> clone -> edit -> PR_ workflow పూర్తి చేసాడు. + +మీ సహకారాన్ని జరుపుకుంటారు మరియు మీ స్నేహితులు మరియు అనుచరులతో దీన్ని [web app](https://roshanjossey.github.io/first-contributions/#social-share) కు వెళ్లండి. + +మీరు ఏ సహాయం అవసరం లేదా ఏవైనా ప్రశ్నలు ఉంటే మీరు మా స్లాక్ జట్టులో చేరవచ్చు. [స్లాక్ జట్టులో చేరండి](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) + +ఇప్పుడు మీరు ఇతర ప్రాజెక్టులకు తోడ్పడటం ప్రారంభించండి. మీరు ప్రారంభించగల సులభమైన సమస్యలతో ప్రాజెక్టుల జాబితాను మేము సంకలనం చేసాము. [వెబ్ ప్రాజెక్టుల జాబితాలు](https://roshanjossey.github.io/first-contributions/#project-list) ను చూడండి. + +### [అదనపు విషయం](additional-material/git_workflow_scenarios/additional-material.md) + + +## ఇతర సాధనాలను ఉపయోగించి ట్యుటోరియల్స్ + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| diff --git a/translations/README.th.md b/translations/README.th.md new file mode 100644 index 00000000000..a818c61a780 --- /dev/null +++ b/translations/README.th.md @@ -0,0 +1,119 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# "Contribute" ผลงานใน GitHub กับผู้อื่นเป็นครั้งแรกใช่ไหม? + +มันเป็นเรื่องยาก, ครั้งแรกของทุกอย่างมันมักจะยากเสมอแหละ โดยเฉพาะการทำงานร่วมกับผู้อื่น เมื่อเราทำอะไรผิดพลาดเรามักจะรู้สึกไม่สบายใจ แต่โอเพนซอร์ส (open source) คือโลกของการทำงานร่วมกัน ! เราจึงอยากให้ผู้ที่เข้ามาใหม่ได้เรียนรู้วิธีการ "คอนทริบิ้วต์" ผลงานร่วมกับผู้อื่นใน GitHub แบบง่าย ๆ + +การอ่านบทความและการทำตามตัวอย่างต่าง ๆ ก็อาจจะช่วยได้ แต่จะมีอะไรดีไปกว่าการที่เราได้ลงมือทำสิ่งนั้น ๆ ด้วยตัวเองล่ะ ! โปรเจ็คนี้จะสอนให้มือใหม่ส่ง "คอนทริบิ้วชั่นครั้งแรก" ได้อย่างง่าย ๆ + +จำเอาไว้ว่า: ทำใจให้สบาย ยิ่งคุณผ่อนคลายมากเท่าไหร่ คุณก็ยิ่งเรียนรู้ได้ดีมากขึ้นเท่านั้น ! + +ถ้าคุณอยากร่วมส่งคอนทริบิ้วชั่นครั้งแรกของคุณ เพียงแค่ทำตามขั้นตอนง่าย ๆ ด้านล่าง เราบอกเลยว่า มันจะสนุกแน่นอน + +fork this repository + +ถ้าหากคุณยังไม่ได้ติดตั้ง git ลงบนเครื่องของคุณ คุณสามารถ[ติดตั้งได้ที่นี่]( https://help.github.com/articles/set-up-git/ ) + +## กด "Fork" โปรเจ็คนี้ + +โปรเจ็คหลักนี้ จะเรียกว่า โปรเจ็คต้นน้ำ คุณสามารถแยกโปรเจ็คต้นน้ำออกไปทำที่แอคเคาน์ส่วนตัวของคุณได้ โดยการกดปุ่ม "Fork" ที่ด้านบนของหน้านี้ + +แล้วโปรเจ็คต้นน้ำจะถูกคัดลอกนำไปใส่ไว้ในแอคเคาน์ของคุณ + +## กด "Clone" โปรเจ็คนี้ + +clone this repository + +เอาล่ะ ตอนนี้ก็ Clone โปรเจ็คนี้ลงบนเครื่องคอมพิวเตอร์ของคุณ โดยการคลิ๊กที่ปุ่ม "Clone" แล้วเลือก *copy to clipboard* (คำสั่งคัดลอก) + +เปิดโปรแกรมเทอร์มินอลในเครื่อง (เช่น Terminal ใน MacOS หรือ cmd ใน Windows) แล้วรันคำสั่ง git ต่อไปนี้: + +``` +git clone "url ที่คัดลอกไว้" +``` +"url ที่คัดลอกไว้" (ไม่ต้องใส่ " ") คือ url ของโปรเจ็คของคุณ คุณสามารถเลื่อนกลับไปดูวิธีการคัดลอก url ได้จากหัวข้อก่อนหน้านี้ + +copy URL to clipboard + +ตัวอย่าง: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +`this-is-you` คือชื่อ username ของคุณบน GitHub ถึงตรงนี้คุณได้ "Clone" โปรเจ็ค first-contributions ไปไว้ที่คอมพิวเตอร์ของคุณแล้ว + +## สร้าง branch + +ในโปรแกรมเทอร์มินอล เปลี่ยน directory ไปยังที่ที่คุณได้ Clone โปรเจ็คไว้: + +``` +cd first-contributions +``` +ตรงนี้ให้สร้าง branch (แตกกิ่งการทำงานใหม่) ด้วยคำสั่ง `git checkout`: +``` +git checkout -b <ชื่อ branch> +``` + +ตัวอย่าง: +``` +git checkout -b add-alonzo-church +``` +(ปกติชื่อของ branch ไม่จำเป็นต้องมีคำว่า *add* แต่ในโปรเจ็คนี้อยากให้ใช้ add-ชื่อ-ของ-คุณ เพราะชื่อของคุณจะไปแสดงอยู่ในรายชื่อ Contributors (ผู้เข้าร่วม) ของโปรเจ็คนี้ + +## เพิ่มหรือลดโค้ดลงไปเลย แล้วอย่าลืม "Commit" บอกว่าคุณได้เปลี่ยนอะไรไปบ้างล่ะ + +ตอนนี้ให้เปิดไฟล์ `Contributors.md` ในโปรแกรม text editor เพิ่มชื่อของคุณลงไป จากนั้นเซฟไฟล์ + +git status + +ในโปรแกรมเทอร์มินอล ถ้าคุณอยู่ที่ directory ของโปรเจ็ค ให้ลองพิมพ์คำสั่ง `git status` จะเห็นว่าคุณได้ทำการเปลี่ยนอะไรไปบ้าง + +เพิ่มการเปลี่ยนแปลงนั้น ๆ เข้าไปใน branch ที่เพิ่งสร้าง ด้วยคำสั่ง `git add`: +``` +git add Contributors.md +``` + +ตอนนี้ "Commit" การเปลี่ยนแปลงนั้น ๆ ด้วยคำสั่ง `git commit`: +``` +git commit -m "Add <ชื่อของคุณ> to Contributors list" +``` +แทนที่ `<ชื่อของคุณ>` ด้วยชื่อจริง ๆ ของคุณ. + +## "Push" โค้ดที่เปลี่ยนไปขึ้นบน GitHub + +"Push" ผลงานที่คุณทำเมื่อกี้นี้ขึ้น GitHub ด้วยคำสั่ง `git push`: +``` +git push origin <ชื่อ branch ของคุณ> +``` +แทนที่ `<ชื่อ branch ของคุณ>` ด้วยชื่อของ branch ของคุณที่เพิ่งสร้างไปเมื่อหัวข้อที่แล้ว ๆ (add-ชื่อ-ของ-คุณ) + +## ส่งผลงานของคุณและรอรีวิวจากเจ้าของโปรเจ็ค + +ไปที่ repository ของคุณบน GitHub คลิ๊กที่ `Compare & pull request` + +create a pull request + +ตอนนี้ก็ส่ง Pull Request ไปที่โปรเจ็คต้นน้ำได้เลย + +submit pull request + +แล้วเดี๋ยวเราจะ "Merge" หรือรวมผลงานที่คุณได้เปลี่ยนแปลงโค้ดมาที่ master branch ของโปรเจ็คนี้ คุณจะได้รับอีเมลล์ เมื่อเราได้ทำการ Merge ผลงานของคุณเรียบร้อยแล้ว + +## ไปไหนต่อดีหลังจากนี้? +ยินดีด้วย คุณเพิ่งทำวัฏจักรพื้นฐานของการทำ contribute คือ fork -> clone -> edit -> pull request ซึ่งสิ่งเหล่านี้คุณจะพบเจอเป็นปกติเมื่อเป็น contributor +ฉลองการมีส่วนร่วมของคุณ จากนั้นก็แบ่งปันให้เพื่อน ๆ ได้ทราบ โดยการไปที่ [หน้าเว็บนี้](https://roshanjossey.github.io/first-contributions/#social-share) + +หรือจะมาร่วมสนทนากับเราผ่าน Slack ในกรณีที่คุณต้องการความช่วยเหลือ หรือมีข้อสงสัยใด ๆ [เข้าร่วม slack กับเรา](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) + +จากนี้คุณสามารถคอนทริบิ้วต์ให้กับโครงการอื่น ๆ ได้ โดยเราได้สร้างรายการบางส่วน เพื่อให้ง่ายต่อการเริ่มต้น [รายชื่อโครงการที่น่าสนใจ](https://roshanjossey.github.io/first-contributions/#project-list) + +### [ข้อมูลอื่น ๆ เพิ่มเติม](../additional-material/git_workflow_scenarios/additional-material.md) + +## ฝึกการคอนทริบิ้วต์โดยใช้เครื่องมืออื่น ๆ + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.tl.md b/translations/README.tl.md new file mode 100644 index 00000000000..22937a7dacc --- /dev/null +++ b/translations/README.tl.md @@ -0,0 +1,123 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Mga unang kontribusyon + +Mahirap. Laging mahirap sa unang beses ng anumang gawain. Lalo na sa isang kolaborasyon, kung saan hindi komportableng tignan at usapan ang mga pagkakamali. Gusto naming simplehan at linawin ang modernong pamamaraan kung papaanong matuto at tumulong ang mga bagong *open-source contributors*. + +Maaaring makatulong ang pagbabasa ng mga artikulo at panonood ng mga *tutorials*, pero ano pa bang mas epektibong pamamaraan kaysa sa aktual na aplikasyon sa isang pagsasanay? Ang pangunahing pakay ng proyektong ito ay gabayin ang mga baguhan na gawin ang kanilang unang *contribution*. Kung ikaw ay isa sa mga taong iyon, sundin lang ang ibabang instruksyon. + +#### *Kung hindi ka komportable na gumamit ng *command line*, [ito ay mga tutorials gamit ang mga *GUI* tools.]( #tutorials-using-other-tools )* + +fork this repository + +Kung hindi naka-*install* ang *git* sa iyong kompyuter, [i-install mo](https://help.github.com/articles/set-up-git/). + +## I-fork ang repository + +I-fork ang repository sa pamamagitan ng pag-click ng *fork* button na matatagpuan sa bandang itaas ng webpage na ito. +Magkakaroon na ng kopya ng repository na ito sa iyong account. + +## I-clone ang repository + +clone this repository + +Ngayon, i-clone ang ngayong na-forked na repository sa iyong kompyuter. Pumunta lang sa iyong GitHub account, buksan ang nai-forked na repository, i-click ang clone button pagkatapos i-click ang *copy to clipboard* icon. + +Buksan ang terminal at i-enter ang sumusunod na git command: + +``` +git clone "url na nakopya mo" +``` +kung saan ang "url na nakopya mo" (wala ang mga quotation marks) ay ang url ng repository (iyong fork ng proyekto). Pakitingin nang mabuti ang mga nakaraan na hakbang upang makuha ang url. + +copy URL to clipboard + +Halimbawa: +``` +git clone https://github.com/iyong-username/first-contributions.git +``` +kung saan ang `iyong-username` ang iyong username sa GitHub. Mula sa command na ito, dito nagsisimula ng paggawa ng kopya ng nilalaman ng first-contributions repository mula sa GitHub papunta sa iyong kompyuter. + +## Gumawa ng isang branch + +Pumunta sa directory ng iyong repository sa iyong kompyuter (kung hindi ka pa nakapunta): + +``` +cd first-contributions +``` +Ngayon, gumawa na ng isang branch gamit ang `git checkout` command: +``` +git checkout -b +``` + +For example: +``` +git checkout -b dagdag-juan-dela-cruz +``` +(Hindi kailangan ng salitang *"dagdag"* sa pangalan ng nadagdag na branch pero makatwiran pa rin na gawin dahil layunin ng branch ang pagdagdag ng iyong pangalan sa isang listahan.) + +## Gumawa ng kinakailangan na pagbabago at i-commit ang mga natukoy na pagbabago + +Ngayon, buksan ang `Contributors.md` file sa isang text editor, idagdag ang iyong pangalan. Huwag mo idagdag sa simula o sa hulian ng tinutukoy na file. Ilagay sa kalagitnaan ng file. At i-save and file. + +git status + + +Kung pumunta ka sa directory ng iyong proyekto at i-enter ang command na `git status`, may makikita kang mga pagbabago. + + +Idagdag ang mga pagbabagong naganap papunta sa iyong branch gamit ang `git add` command: + +``` +git add Contributors.md +``` + +Ngayon, i-commit ang mga nabagong files gamit ang `git commit` command: +``` +git commit -m "Add to Contributors list" +``` +kung saan ang `` ay ang iyong pangalan. + +## I-push ang mga changes sa GitHub + +I-push ang mga nabago mong files gamit ang command na `git push`: +``` +git push origin +``` +kung saan ang `` ay ang pangalan ng branch na naidagdag mo kani-kanila lang. + +## I-submit ang changes para sa review + +Pumunta sa iyong repository sa GitHub at may makikita kang `Compare & pull request` button, i-click mo ang tumutukoy na button. + +create a pull request + +I-submit ang pull request. + +submit pull request + +Mga oras na nakalipas at sasamahin ko ang mga pagbabago na nagawa mo papunta sa master branch ng proyekto na ito. May makukuha kang notification email kapag ang mga pagbabago ay na-isama sa proyekto. + +## Saan na mula rito? + +Congrats! Nakumpleto mo ang standard _fork -> clone -> edit -> PR_ na workflow na laging mong makakasalamuha bilang isang kontribyutor! + +I-celebrate ang iyong kontribusyon at i-share mo sa mga kaibigan at followers mo sa pagpunta sa [web app](https://firstcontributions.github.io/#social-share). + +Puwede ka rin sumama sa aming Slack team kung kailangan mo ng karagdagan tulong o gustong magtanong. [Sumama sa aming Slack team](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Ngayon, magsimula ka na mag-contribute sa ibang proyekto. Nagtipon kami ng listahan ng mga proyekto na may madaling issues na puwedeng-puwede kang makisabay. Paki-visit lang [ang listahan mula sa web app](https://firstcontributions.github.io/#project-list). + +### [Mga karagdagan na materyal](additional-material/git_workflow_scenarios/additional-material.md) + + +## Mga tutorials gamit ang ibang tools + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.tr.md b/translations/README.tr.md new file mode 100644 index 00000000000..9f58cd27cb2 --- /dev/null +++ b/translations/README.tr.md @@ -0,0 +1,128 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# İlk katkılar + +Zor gelir. Bir işi ilk kez yapmak her zaman zor gelir. Özellikle birileriyle işbirliği içindeyseniz, hata yapmak içinize sinmez. Fakat açık kaynağın temelinde işbirliği ve birlikte çalışma yatar. Biz açık kaynak projelere ilk kez katkıda bulunacak kişilerin süreci öğrenmesini ve ilk katkılarını sunmalarını kolaylaştırmak istiyoruz. + +Makale okumak ve eğitim videoları izlemek yardımcı olabilir, fakat bir işi gerçekten yapmanın yerini ne tutabilir ki? Bu proje yeni başlayanların veya ilk defa katkıda bulunacakların işini kolaylaştırmak ve onlara rehberlik etmek amacındadır. Unutmayın ki ne kadar rahat olursanız o kadar rahat öğrenirsiniz. Eğer bir GitHub projesine ilk defa katkıda bulunacaksanız, aşağıda gösterilen basit adımları izlemeniz yeterli olacaktır. Söz veriyoruz, eğlenceli olacak. + +fork this repository + +Eğer bilgisayarınızda git kurulu değil ise, [ yükleyin ]( https://help.github.com/articles/set-up-git/ ). + +## Projeyi "çatallandırma" + +Sayfanın sağ üst köşesinde bulunan "Fork" butonuna basıp bu projeyi çatallandırın. +Bu işlem sizin hesabınız altında projenin bir kopyasını oluşturacaktır. + +## Depoyu (Repository) klonlama + +clone this repository + +Şimdi bu depoyu bilgisayarınıza klonlayın. Bunun için 'clone' butonuna basıp ardından *copy to clipboard* ikonuna basın. + +Daha sonra komut istemini açıp aşağıdaki git komutunu girmemiz gerekiyor: + +``` +git clone "kopyaladığınız-url" +``` +"kopyaladığınız-url" (tırnak işaretleri olmadan) yerine bu deponun GitHub sayfasından aldığınız linki koplayın. + +copy URL to clipboard + +Örneğin: +``` +git clone https://github.com/kullanıcı-adi/first-contributions.git +``` +`kullanıcı-adi` sizin GitHub kullanıcı adınız. Burada GitHub üzerinde bulunan first-contributions reposunun içeriğini bilgisayarınıza kopyalıyorsunuz. + +## Dal (Branch) oluşturma + +Eğer henüz klasör içinde değilseniz komut isteminde ana klasörünün konumuna gidin: + +``` +cd first-contributions +``` +`git checkout` komutunu kullanarak yeni bir dal(branch) oluşturun: +``` +git checkout -b +``` + +Örneğin: +``` +git checkout -b ekle-aydin-cagri-dumlu +``` +(Dal ismi içinde *ekle* kelimesinin geçme zorunluluğu yok, fakat bu dal isminizi katkı sunanlar listesine ekleme amacıyla oluşturulduğundan, ekle yazmak mantıklı olacaktır.) + +## Gerekli değişiklikleri yapıp bu değişiklikleri onaylama + +Şimdi, bir metin editöründe `Contributors.md` dosyasını açın. Hafif bir işaretleme dili olan Markdown'a alışkın olmanız gerekmektedir. Nasıl kullanacağınızı öğrenmek için bu [kopya kağıdına](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) göz atabilirsiniz. + +`Contributors.md` dosyasının sonuna bu satırı ekleyin: + +``` +- [İsminiz](https://github.com/kullanici-adiniz) +``` + +Örneğin: + +``` +- [Ahmet Yılmaz](https://github.com/ahmet-yilmaz) +``` + +`](` arasında boşluk olmadığından emin olun. Dosyayı kaydedin ve kapatın. + +Komut istemi üzerinde proje klasörüne gidip `git status` komutunu yazdığınızda yaptığınız değişiklikleri göreceksiniz. `git add` komutu ile bu değişiklikleri oluşturduğunuz dal içine ekleyin. + +``` +git add Contributors.md +``` + +Şimdi `git commit` komutunu kullanarak değişikliklerinizi onaylayın (commit): +``` +git commit -m " katkıda bulunanlar listesine eklendi" +``` +`` yerine kendi isminizi yazın. + +(Ç.N: Açık kaynak dünyasında dünyanın farklı yerlerinden insanlarla birlikte çalışacağınız için onay mesajını İngilizce yazabilirsiniz.) + +## Değişiklikleri GitHub üzerine "itme" (Push) + +`git push` komutu ile değişikliklerinizi ittirin: +``` +git push origin +``` +`` yerine daha önce oluşturduğunuz dalın ismini girin. + +## Değişikliklerinizi inceleme için gönderin + +Oluşturduğunuz deponun Github sayfasında `Compare & pull request` butonunu göreceksiniz. Bu butona basın. + +create a pull request + +Şimdi çekme isteğini (pull request) gönderin. + +submit pull request + +Yaptığınız değişiklikleri en kısa zamanda projenin "master" dalı ile birleştireceğiz. Bu işlem tamamlandığı zaman bir bilgilendirme postası alacaksınız. + +### [Sonraki adımlar](../additional-material/git_workflow_scenarios/additional-material.md) + +## Bundan sonra ne yapabilirim? + +Sunduğunuz katkının coşkusunu yaşamak ve bunu arkadaşlarınız ve takipçilerinizle paylaşmak için [bu bağlantıdaki](https://roshanjossey.github.io/first-contributions/#social-share) uygulamamızı kullanabilirsiniz. + +Bir sorunuz veya yardıma ihtiyacınız olursa Slack takımımıza katılabilirsiniz. [Slack takımına katıl](https://firstcontributions.herokuapp.com) + +Artık diğer projelere katkı sunmaya hazırsınız. Çözmeye başlayabileceğiniz giriş seviyesindeki konulara (issue) sahip projeleri [sizin için derledik](https://roshanjossey.github.io/first-contributions/#project-list). + +## Diğer araçlarla ilgili eğitimler + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + diff --git a/translations/README.ua.md b/translations/README.ua.md new file mode 100644 index 00000000000..6e1deeeb5b3 --- /dev/null +++ b/translations/README.ua.md @@ -0,0 +1,139 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +# Перший внесок + +Це важко. Це завжди важко, коли ви робите щось вперше. Особливо, коли ви працюєте над проектом з кимось, помилки будуть вдвічі неприємнішими. Але Open Source завжди пов’язаний з колективною роботою. Ми хочемо спростити шлях для початківців, які бажають зробити свій перший внесок. + +Можна прочитати безліч інструкцій та переглянути сотні відео, але що може бути краще, ніж спробувати зробити внесок і не зламати нічого? Ціль цього проекту надати можливість новачкам зробити їх перший внесок. Запам’ятайте: чим більше ви розслаблені, тим краще ви вчитеся. Якщо ви хочете зробити свій перший внесок, просто слідуйте простим крокам нижче. Ми обіцяємо, це буде весело! + +fork this repository + +Якщо ви ще не встановили GIT, тоді [ зробіть це негайно ]( https://help.github.com/articles/set-up-git/ ) :) + +## Відгалужте репозиторій + +Відгалужте свою власну копію цього репозиторія, натиснувши кнопку `fork` зверху цієї сторінки. +Це призведе до створення копії цього репозиторія у вашому акаунті. + +## Клонуйте репозиторій + +clone this repository + +Тепер клонуйте цей репозиторій на ваш комп’ютер. Натисніть на кнопку `clone`, а потім на іконку `copy to clipboard`. + +Відкрийте термінал і виконайте наступні команди: + +``` +git clone "посилання, яке ви щойно скопіювали" +``` +де `посилання, яке ви щойно скопіювали` (без кавичок) є адресою цього репозиторію. Дивіться попередній крок для того, щоб отримати цю адресу. + +copy URL to clipboard + +Наприклад: +``` +git clone https://github.com/this-is-you/first-contributions.git +``` +де `this-is-you` ваш GitHub нікнейм. Таким чином ви копіюєте вміст репозиторію з GitHub, в який збираєтесь зробити внесок, на ваш комп’ютер. + +## Створюємо вітку + +Перейдіть в директорію з репозиторієм на вашому комп’ютері (якщо ви ще цього не зробили): + +``` +cd first-contributions +``` +Тепер створюємо вітку за допомогою команди `git checkout`: +``` +git checkout -b +``` + +Наприклад: +``` +git checkout -b add-petro-church +``` +(Назва вітки не повинна обов’язково містити слово *add*, але це має сенс, якщо майбутні зміни передбачають додавання чогось, наприклад, вашого імені в список контрибуторів.) + +## Робимо необхідні зміни та записуємо їх в репозиторій + +Тепер відкриваємо файл `Contributors.md` в текстовому редакторі, і додаємо ваше ім’я, а потім зберігаємо файл. Якщо ви перейдете в директорію проекту і виконаєте команду `git status`, ви побачите зміни. Додайте ці зміни до вітки, яку ви тільки що створили за допомогою команди `git add`: +``` +git add Contributors.md +``` + +Тепер запишіть ці зміни за допомогою команди `git commit`: +``` +git commit -m "Add to Contributors list" +``` +замініть `` своїм іменем. + +## Відправляємо зміни в GitHub + +Відправте зміни на віддалений репозиторій в GitHub за допомогою команди `git push`: +``` +git push origin +``` +замініть `` назвою вітки, яку ви створили раніше. + +## Відправляємо зміни на перевірку + +Коли ви перейдети до свого репозиторія в GitHub, ви побачити кнопку `Compare & pull request`. Сміливо натисніть на цю кнопку. + +create a pull request + +Тепер зміни відправлені на перевірку і затвердження. + +submit pull request + +Скоро я об’єднаю ваші зміни з основною віткою цього репозиторія. Ви отримаєте листа коли це буде зроблено. + +Основна вітка вашого репозиторія не буде змінена. Якщо ви хочете синхронізувати ваше відгалуження з моїм репозиторієм, слідуйте цієї інструкції. + +## Зберігаємо свій репозиторій синхронізованим + + Спочатку перейдіть на основну вітку. + ``` + git checkout master + ``` + + Потім додаєм мій репозиторій як `upstream remote url`: +``` +git remote add upstream https://github.com/Roshanjossey/first-contributions +``` +Таким чином ми повідомляємо git про те, що інша версія цього проекту існує за визначеною адресою і ми називаєм це `upstream`. Як тільки зміни будуть об’єднані, заберіть нову версію мого репозиторію: +``` +git fetch upstream +``` +Таким чином ви забираєте всі зміни з мого репозиторію. Тепер ви повинні об’єднати, зміни які прийшли з мого репозиторію, в вашу основну вітку. +``` +git rebase upstream/master +``` +Таким чином ви приймаєте всі зміни до основної вітки. Якщо ви відправите зміни до GitHub, ваше відгалуження також буде мати ці зміни: +``` +git push origin master +``` +Зауважте, таким чином ви відправляєте зміни до віддаленого репозиторія, який був названий `origin`. + +Тепер я об’єднав вашу вітку `` з моєю основною віткою, а ви об’єднали мою основну вітку зі своєю основною віткою. Вітка, яку ви створювали для внесення змін більше не потрібна, ви можете видалити її: +``` +git branch -d +``` +до того ж ви можете видалити і її віддалену версію також: +``` +git push origin --delete +``` +Називати вітку в такий спосіб не обов’язково, однак це було зроблено з певною метою, щоб показати призначення цієї вітки. Існування будь-якої вітки може бути коротким, адже в кінці-кінців, всі вітки об’єднуються з основною віткою. + +## Інструкції для інших інструментів + + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +## Що далі? + +Ви можете приєднатися до нашої команди в slack, якщо ви потребуєте будь-якої допомоги або маєте якісь запитання. [Приєднатися до команди в slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY) diff --git a/translations/README.ur.md b/translations/README.ur.md new file mode 100644 index 00000000000..568cd33ef29 --- /dev/null +++ b/translations/README.ur.md @@ -0,0 +1,151 @@ +
+Open Source LoveOpen Source Helpers +
+ +#
پہلی شراکت
+ +
+یہ مشکل ہے. پہلی بار جب آپ کچھ کرتے ہو تو وہ ہمیشہ مشکل لگتا ہے. خاص طور پر جب آپ تعاون کر رہے ہیں، غلطیاں کرنا کوئ پرسکون چیز نہیں ہے. لیکن اوپن سورس مکمل طورپر تعاون اور مل جل کر کام کرنے کا نام ہے. ہم چاہتے ہیں کہ نئے اوپن سورس کے معاونین اسےآسانی سے سیکھیں اور پہلی بار اس میں شرکت کریں. +
+
+
+مضامین پڑھنے اور سبق دیکھنے سے مدد مل سکتی ہے، لیکن چیزوں میں الجھے بغیر کسی کام کو اصل میں کرنا کتنا بہتر ہے؟ اس پروجیکٹ کا مقصد رہنمائی فراہم کرنا اور نئے شرکت کرنے والے لوگوں کے راستے کو آسان بنانا ہے. یاد رکھیں: آپ جتنا پرسکوں ہوں گے، آپ اتنا بہتر سیکھیں گے. اگر آپ اپنا پہلا اشتراک کرنا چاہتے ہیں، تو ذیل میں دیے گئے سادہ مراحل پر عمل کریں. ہم آپ سے وعدہ کرتے ہیں، یہ قابل لطف ہوں گے. +
+ + + +
+اگر آپ کی مشین پر گٹ نہیں ہے تو، +انسٹال کریں +
+ +##
اس گودام کوفورک کریں
+
+اس صفحے کے سب سے اوپر فورک بٹن دبا کر اس گودام کا استعمال کریں. +اس گودام کوفورک کریں +
+یہ آپ کے کھاتے میں اس کی ایک نقل ذخیرہ کرے گا۔. +
+ +##
ذخیرے کا کلون کیجیے
+ +
+اب آپ اپنی مشین پر یہ ریپو کلون کریں. +
+ذخیرے کا کلون کجیے +
+ کلون بٹن کو دبائیں اور پھر "copy to clipboard" آئیکن کو دبائیں۔ +
+یوآرایل کلپ بورڈ پر کاپی کریں +
+ایک ٹرمینل کھولیں اور مندرجہ ذیل گٹ کمانڈ چلائیں: +
+ +``` +git clone "یو آر ایل جو آپنے ابھی کاپی کی" +``` + +
+جہاں "یو آر ایل آپ نے کاپی کیا ہے" (اقتباس کے نشانات " " کے بغیر) اس ذخیرہ کرنے کے لئے یو آر ایل ہے. یو آر ایل حاصل کرنے کیلئے پچھلے مرحلے کو دیکھیں. +
+ +
مثال کے طور پر:
+ +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +
اس میں 'this-is-you' آپکا GitHub یوزرنیم ہے۔ یہاں آپ first-contributions GitHub گودام کے مندرجات کمپیوٹر پر نقل کر رہے ہیں.
+ +##
ایک شاخ بنائیں
+ +
اپنے کمپیوٹر پر ذخیرہ کرنے والی ڈائرکٹری میں تبدیل کریں (اگرآپ پہلے سے وہاں نہیں ہیں):
+ +``` +cd first-contributions +``` + +
اب git checkout کمانڈاستعمال کرتے ہوئے ایک شاخ تشکیل دیں :
+ +``` +git checkout -b +``` + +
مثال کے طور پر:
+ +``` +git checkout -b add-alonzo-church +``` + +
(شاخ کا نام میں ضروری نہیں add شامل کریں، لیکن یہ مناسب ہے کہ اس میں یہ شامل ہو، کیونکہ اس شاخ کا مقصد آپ کے نام کو فہرست میں شامل کرنا ہے.)
+ +##
ضروری تبد یلیاں کریں اور ان تبد یلیوں کو انجام دیں۔
+ +
+اب Contributors.md فائل کو ٹیکسٹ ایڈیٹر پر کھولیں، اپنا نام اس میں شامل کریں، اور پھر فائل کو محفوظ کریں. اگر آپ پراجیکٹ ڈائرکٹری میں جاتے ہیں اور کمانڈ git status کو چلاتے ہیں، تو آپ دیکھیں گے کہ تبدیلیاں موجود ہیں. ان تبدیلیوں کو اس شاخ میں شامل کریں git add کمانڈ استعمال کرتے ہوے، جسے ابھی آپنے بنایا تھا۔ : +
+ +``` +git add Contributors.md +``` + +
اب git commit کمانڈ کا استعمال کرتے ہوئے ان تبدیلیوں کو سونپ دیں:
+ +``` +git commit -m "Add to Contributors list" +``` + +
<your-name> کو اپنے نام کے ساتھ تبدیل کردیں.
+ +##
ان تبدیلیوں کو GitHub پردهکیل دیں۔
+ +
git push کمانڈ کے ذریعے اپنی تبدیلیوں کو پش کریں:
+ +``` +git push origin +``` + +
<add-your-name> کو شاخ کے نام کے ساتھ بدل دیں، جسے آپ نے پہلے بنایا تھا.
+ +##
اپنی تبدیلیوں کوجائزے کیلئے جمع کروائیں۔
+ +
اگر آپ GitHub پر اپنے ذخیرے پر جاتے ہیں تو، آپ کو Compare & pull request دیکھائ دے گا. اس بٹن کو دبائیں.
+ +ایک پل درخواست کریں + +
اب پل درخواست جمع کروائیں.
+ +پل درخواست جمع کروائیں + +
جلد ہی میں آپ کی تمام تبدیلیوں کو اس پروجیکٹ کی ماسٹر شاخ میں ضم کر دونگا. تبدیلیوں کو ضم کرنے کے بعد آپ کو نوٹیفکیشن ای میل مل جائے گی
+ +###
[ اضافی مواد ](../additional-material/git_workflow_scenarios/additional-material.md)
+ +##
دوسرے ٹولز کو استعمال کرتے ہوئے سبق۔
+ + +|GitHub Desktop|Visual Studio 2017|GitKraken| +|---|---|---| +|[GitHub Desktop](../github-desktop-tutorial.md)|[Visual Studio 2017](../github-windows-vs2017-tutorial.md)|[GitKraken](../gitkraken-tutorial.md)| + +##
یہاں سے کہاں جایا جائے؟
+ +
+ آپ کو مدد کی ضرورت ہے یا کوئی سوال ہو تو آپ ہماری سلیک ٹیم میں بھی شامل ہوسکتے ہیں. +سلیک ٹیم میں شمولیت اختیار کریں۔ +
+
+
+ادھر آپ چند مقبول ذخیروں میں کچھ ابتدائی سطح کے مسائل حل کر سکتے ہیں. آگے بڑھیے اور مزید جاننے کے لئے ان ذخیروں پر جائیے۔ +
+
+ +|[![exercism](https://avatars2.githubusercontent.com/u/5624255?v=3&s=100)](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[![fun-retro](https://avatars3.githubusercontent.com/u/15913975?v=3&s=100)](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[![habitat](https://avatars1.githubusercontent.com/u/18171698?v=3&s=100)](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![scikit-learn](https://avatars0.githubusercontent.com/u/365630?v=3&s=100)](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[![elasticsearch](https://avatars2.githubusercontent.com/u/6764390?v=3&s=100)](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|---|---|---|---|---|---|---|---| +|[exercism](https://github.com/exercism/exercism.io/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+patch%22)|[Fun Retros](https://github.com/funretro/distributed/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly)|[react](https://github.com/facebook/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+bug%22)|[habitat](https://github.com/habitat-sh/habitat/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[scikit-learn](https://github.com/scikit-learn/scikit-learn/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[Leiningen](https://github.com/technomancy/leiningen/issues?q=is%3Aopen+is%3Aissue+label%3ANewbie)|[numpy](https://github.com/numpy/numpy/issues?q=is%3Aopen+is%3Aissue+label%3A%22Easy+Fix%22)|[elasticsearch](https://github.com/elastic/elasticsearch/issues?q=is%3Aopen+is%3Aissue+label%3A%22low+hanging+fruit%22)| +|[![homebrew](https://avatars2.githubusercontent.com/u/1503512?v=3&s=100)](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[![rust](https://avatars1.githubusercontent.com/u/5430905?v=3&s=100)](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[![vuejs](https://avatars1.githubusercontent.com/u/6128107?v=3&s=100)](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[![Suave](https://avatars2.githubusercontent.com/u/5822862?v=3&s=100)](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[![OpenRA](https://avatars3.githubusercontent.com/u/409046?v=3&s=100)](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[![PowerShell](https://avatars0.githubusercontent.com/u/11524380?v=3&s=100)](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[![coala](https://avatars2.githubusercontent.com/u/10620750?v=3&s=100)](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[![moment](https://avatars2.githubusercontent.com/u/4129662?v=3&s=100)](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[homebrew](https://github.com/Homebrew/brew/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)|[Rust](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)|[vuejs](https://github.com/vuejs/vue/issues?q=is%3Aopen+is%3Aissue+label%3A%22contribution+welcome%22)|[Suave](https://github.com/SuaveIO/suave/issues?q=is%3Aopen+is%3Aissue+label%3Ahardness-easy)|[OpenRA](https://github.com/OpenRA/OpenRA/issues?q=is%3Aopen+is%3Aissue+label%3AEasy)|[PowerShell](https://github.com/powershell/powershell/issues?q=is%3Aopen+is%3Aissue+label%3AUp-for-Grabs)|[coala](https://github.com/coala/coala/issues?q=is%3Aopen+is%3Aissue+label%3Adifficulty%2Flow+label%3Adifficulty%2Fnewcomer)|[moment](https://github.com/moment/moment/issues?q=is%3Aopen+is%3Aissue+label%3AUp-For-Grabs)| +|[![ava](https://avatars0.githubusercontent.com/u/8527916?v=3&s=100)](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[![freeCodeCamp](https://avatars0.githubusercontent.com/u/9892522?v=3&s=100)](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![webpack](https://avatars3.githubusercontent.com/u/2105791?v=3&s=100)](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[![hoodie](https://avatars1.githubusercontent.com/u/1888826?v=3&s=100)](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[![pouchdb](https://avatars3.githubusercontent.com/u/3406112?v=3&s=100)](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[![neovim](https://avatars0.githubusercontent.com/u/6471485?v=3&s=100)](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[![babel](https://avatars2.githubusercontent.com/u/9637642?v=3&s=100)](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[](https://github.com/adobe/brackets/labels/Starter%20bug)| +|[ava](https://github.com/avajs/ava/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+for+beginner%22)|[freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[webpack](https://github.com/webpack/webpack/issues?q=is%3Aopen+is%3Aissue+label%3A%22D1%3A+Easy+%28Contrib.+Difficulty%29%22)|[hoodie](https://github.com/hoodiehq/hoodie/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)|[pouchdb](https://github.com/pouchdb/pouchdb/issues?q=is%3Aopen+is%3Aissue+label%3A%22first+timers+only%22)|[neovim](https://github.com/neovim/neovim/issues?q=is%3Aopen+is%3Aissue+label%3Aentry-level)|[babel](https://github.com/babel/babel/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner-friendly) |[brackets](https://github.com/adobe/brackets/labels/Starter%20bug)| +| [![Node.js](https://avatars1.githubusercontent.com/u/9950313?v=3&s=100)](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)|[](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22)| +| [Node.js](https://github.com/nodejs/node/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) |[Semantic-UI-React](https://github.com/Semantic-Org/Semantic-UI-React/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+contribution%22) | diff --git a/translations/README.vn.md b/translations/README.vn.md new file mode 100644 index 00000000000..ac945c8a67d --- /dev/null +++ b/translations/README.vn.md @@ -0,0 +1,122 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + +*Người dịch: [Tran Ly Vu](https://github.com/tranlyvu)* + +# Đóng góp đầu tiên + +Lần đầu tiên bạn làm điều gì đó thật khó khăn. Đặc biệt khi bạn đang cộng tác, sai lầm là điều rất khó chịu. Chúng tôi muốn đơn giản hóa quy trình học và đóng góp vào những dự án (project) mã nguồn mở. + +Việc đọc hướng dẫn có tác dụng, nhưng có gì tốt hơn là thực sự đóng góp trong môi trường thực tiễn? project này nhằm mục đích cung cấp hướng dẫn và đơn giản hóa cách thức những người mới tham gia đóng góp. Nếu bạn mong muốn thực hiện việc đóng góp đầu tiên của mình, chỉ cần làm theo các bước đơn giản bên dưới. + +#### *Nếu bạn không thích làm việc với dòng lệnh, [đây là hướng dẫn sử dụng GUI.]( #tutorials-using-other-tools )* + +fork this repository + +Nếu bạn không có git trên máy tính của bạn, [cài đặt](https://help.github.com/articles/set-up-git/) + +## Copy kho mã nguồn (Fork) + +Copy kho mã nguồn này bằng cách nhấn vào nút `Fork` đầu trang này. Bản sao kho mã nguồn mày sẽ được tạo ra trong tài khoản của bạn. + +## Sao chép kho mã nguồn (clone) + +clone this repository + +Bây giờ sao chép kho mã nguồn này vào máy của bạn. Nhấn vào nút `clone` và sau đó nhấn vào biểu tượng *copy to clipboard* + +Mở một bộ xử lý terminal và chạy lệnh git sau đây: + +``` +git clone "url bạn vừa sao chép" +``` +Trong đó "url bạn vừa sao chép" (không có dấu ngoặc kép) là url dẫn vào kho mã nguồn này. Xem các bước trước đó để có được url. + +copy URL to clipboard + +Ví dụ: +``` +git clone https://github.com/tên-bạn/first-contributions.git +``` +Trong đó `tên-bạn` là tên người dùng github của bạn. Ở đây bạn đang sao chép nội dung của kho mã nguồn "first-contributions" trong github vào máy tính của bạn + +## Tạo chi nhánh (branch) + +Thay đổi môi trường làm việc bằng thư mục của kho mã nguồn trên máy tính của bạn. + +``` +cd first-contributions +``` +Bây giờ tạo ra một chi nhánh sử dụng lệnh `git checkout` +``` +git checkout -b +``` + +Ví dụ: +``` +git checkout -b thêm-Tran-Ly-Vu +``` +(Tên của chi nhánh không cần phải có từ *thêm* trong đó, nhưng nó được dùng vì mục đích của chi nhánh này là thêm tên của bạn vào danh sách.) + +## Thực hiện những thay đổi cần thiết và chấp nhận những thay đổi này + +Bây giờ mở tập tin `Contributors.md` trong một trình soạn thảo văn bản và thêm tên của mình vào nó. +Đừng thêm vào đầu hoặc cuối tập tin. Thêm vào bất cứ nơi nào ở giữa. Bây giờ, lưu tập tin. + +git status + +Nếu bạn vào thư mục hiện tại của project và thực hiện lệnh `git status`, bạn sẽ thấy những thay đổi. + +Thêm những thay đổi vào chi nhánh bạn vừa tạo bằng lệnh `git add`: + +``` +git add Contributors.md +``` + +Bây giờ chấp nhận những thay đổi bằng cách sử dụng dòng lệnh `git commit` dưới đây. +``` +git commit -m "Them vào danh sách Cộng tác viên" +``` + +Thay thế `` với tên của bạn + +## Đẩy thay đổi lên github + +Đẩy những thay đổi của bạn sử dụng `git push` +``` +git push origin +``` +Thay thế `` với tên của chi nhánh bạn tạo ra trước đó + +## Gửi những thay đổi của bạn để xem xét + +Nếu bạn mở kho mã nguồn của bạn trên github, bạn sẽ thấy nút `Compare & pull request`. Nhấp vào nút đó. + +create a pull request + +Bây giờ gửi yêu cầu kéo. + +submit pull request + +Tôi sẽ sớm hợp nhất tất cả các thay đổi của bạn vào nhánh chủ (master branch) của project này. Bạn sẽ nhận được email thông báo sau khi các thay đổi đã được hợp nhất. + +## Tiếp theo + +Chúc mừng! Bạn vừa hoàn thành quy trình tiêu chuẩn copy (fork) -> Sao chép (clone) -> chỉnh sửa (edit) -> yêu cầu kéo (pull request) mà bạn sẽ gặp thường xuyên khi đóng góp! + +Hãy ăn mừng đóng góp của bạn và chia sẻ nó với bạn bè và những người theo dõi của bạn bằng cách truy cập [ứng dụng web](https://roshanjossey.github.io/first-contribution/#social-share). + +Bạn có thể tham gia slack của chúng tôi trong trường hợp bạn cần trợ giúp hoặc có câu hỏi nào. [Tham gia slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Để hỗ trợ bạn với việc đóng góp cho các project khác. Chúng tôi đã chuẩn bị danh sách các project đơn giản mà bạn có thể bắt đầu. Hãy kiểm tra [danh sách các project](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Tài liệu bổ sung](additional-material/git_workflow_scenarios/additional-material.md) + +## Hướng dẫn sử dụng các công cụ khác + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[GitHub Desktop](github-desktop-tutorial.md)|[Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Visual Studio Code](github-windows-vs-code-tutorial.md)| + diff --git a/translations/README.zul.md b/translations/README.zul.md new file mode 100644 index 00000000000..a878e6a7d56 --- /dev/null +++ b/translations/README.zul.md @@ -0,0 +1,183 @@ +[![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=103)](https://github.com/ellerbrock/open-source-badges/) +[](https://join.slack.com/t/firstcontributors/shared_invite/enQtNjkxNzQwNzA2MTMwLTVhMWJjNjg2ODRlNWZhNjIzYjgwNDIyZWYwZjhjYTQ4OTBjMWM0MmFhZDUxNzBiYzczMGNiYzcxNjkzZDZlMDM) +[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) +[![Open Source Helpers](https://www.codetriage.com/roshanjossey/first-contributions/badges/users.svg)](https://www.codetriage.com/roshanjossey/first-contributions) + + +# Iminikelo Yokuqala + + +Kulukhuni. Kuhlale kunzima okokuqala lapho wenza okuthile. Ikakhulukazi uma ubambisana, ukwenza amaphutha akuyona into ekhululekile. Sifuna ukwenza lula ukuthi abanikeli abasha abavulekile bafunde futhi bahlanganyele okokuqala. + +Ukufunda izihloko nokufundiswa kokubuka kungasiza, kodwa yini engcono kunokwenza okwamanje izinto ezenzakalweni? Le phrojekthi ihlose ukunikeza isiqondiso nokwenza ukuthi abaqalayo benze indlela yabo yokuqala. Uma ubheka ukwenza umnikelo wakho wokuqala, landela izinyathelo ezingezansi. + +#### *Uma ungakhululekile ngomugqa womyalo, [nansi izifundo ezisebenzisa amathuluzi we-GUI.]( #tutorials-using-other-tools )* + +#### *Funda lokhu [kwezinye izilimi.](translations/Translations.md).* + +[🇮🇳](translations/README.hi.md) +[🇲🇲](translations/README.mm_unicode.md) +[🇮🇩](translations/README.id.md) +[🇫🇷](translations/README.fr.md) +[🇪🇸](translations/README.es.md) +[](translations/README.ca.md) +[🇳🇱](translations/README.nl.md) +[🇱🇹](translations/README.lt.md) +[🇷🇺](translations/README.ru.md) +[:slovakia:](translations/README.slk.md) +[🇯🇵](translations/README.ja.md) +[🇻🇳](translations/README.vn.md) +[🇵🇱](translations/README.pl.md) +[🇮🇷](translations/README.fa.md) +[🇮🇷](translations/README.fa.en.md) +[🇰🇷 🇰🇵](translations/README.ko.md) +[🇩🇪](translations/README.de.md) +[🇩🇰](translations/README.da.md) +[🇨🇳](translations/README.chs.md) +[🇹🇼](translations/README.cht.md) +[🇬🇷](translations/README.gr.md) +[🇪🇬](translations/README.eg.md) +[🇸🇦](translations/README.ar.md) +[🇺🇦](translations/README.ua.md) +[🇧🇷](translations/README.pt_br.md) +[🇵🇹](translations/README.pt-pt.md) +[🇮🇹](translations/README.it.md) +[🇹🇭](translations/README.th.md) +[🏴](translations/README.gl.md) +[🇵🇰](translations/README.ur.md) +[:bangladesh:](translations/README.bn.md) +[🇲🇩 🇷🇴](translations/README.ro.md) +[🇹🇷](translations/README.tr.md) +[🇸🇪](translations/README.se.md) +[:slovenia:](translations/README.sl.md) +[🇮🇱](translations/README.hb.md) +[🇨🇿](translations/README.cs.md) +[](translations/README.en-pirate.md) +[🇲🇽](translations/README.mx.md) +[🇿🇦](translations/README.zul.md) +[🇿🇦](translations/README.afk.md) +[🇰🇪](translations/README.kws.md) +[🇳🇬](translations/README.igb.md) +[🇷🇸](translations/README.sr.md) + + + + + +fork this repository + + +Uma ungenayo i-git kumshini wakho, [faka]( https://help.github.com/articles/set-up-git/). + +## Fometha le ndawo yokugcina + +Fometha le repo ngokuchofoza inkinobho yemfoloko phezulu kwaleli khasi. Lokhu kuzokhipha ikhophi yalesi sikhwama ku-akhawunti yakho. + +## Qalisa i-repository + +clone this repository + +Manje faka i-repo efakwe emshini wakho kumshini wakho. Yiya ku-akhawunti yakho ye-GitHub, vula i-repo evuliwe, chofoza inkinobho ye-clone bese uchofoza ikhophi ku-clipboard icon. + +Vula i-console bese ugijima umyalo we-git: + +``` +git clone "url you just copied" +``` +lapho "u-url osuvele ukopishe khona" (ngaphandle kwama-quote marks) yi-url kule ndawo yokugcina (ifomu lakho lephrojekthi). Bona izinyathelo zangaphambilini ukuthola i-url. + +copy URL to clipboard + + +Ngokwesibonelo: + +``` +git clone https://github.com/this-is-you/first-contributions.git +``` + +iphi this-is-youigama lomsebenzisi lakho le-GitHub. Lapha ukopisha okuqukethwe kokulondoloza kokuqala ku-GitHub kwikhompyutha yakho. + +## Dala igatsha + +Shintsha kwirekhodi lokugcina ekhompyutheni yakho (uma ungasekho kakade): + +``` +cd first-contributions +``` + +Manje dala igatsha usebenzisa `git checkout` umyalo: + +``` +git checkout -b +``` + +Ngokwesibonelo + +``` +git checkout -b engeza-adam-kowalski +``` +(Igama legatsha ayidingi ukuba izwi engeza kuwo, kodwa into enengqondo ukufaka ngoba inhloso yaleli gatsha ukwengeza igama lakho uhlu.) + +## Yenza ushintsho oludingekile bese wenza lezo zinguquko + +Manje `Contributors.md` ifayela evulekile kumhleli wombhalo, engeza igama lakho kuyo. Ungayifaki ekuqaleni noma ekupheleni kwefayela. Beka noma kuphi phakathi. Manje, londoloza ifayela. + +git status + +Uma uya encwadini yomhlahlandlela bese wenza umyalo `git status`, uzobona kukhona izinguquko. + + +Engeza lezo zinguquko egatsheni owake wadala usebenzisa `git add` umyalo: + +``` +git add Contributors.md +``` + +Manje yenza lezo zinguquko usebenzisa `git commit` umyalo: + +``` +git commit -m "Add to Contributors list" +``` + +ukufaka esikhundleni `` ngegama lakho. + +## Shintsha izinguquko ku-GitHub + +Pushisa izinguquko zakho usebenzisa umyalo `git push`: + +``` +git push origin +``` + +kufaka esikhundleni `` segama legatsha owadala ngaphambilini. + +## Thumela izinguquko zakho ukuze zibuyekezwe + +Uma uya endaweni yakho yokugcina ku-GitHub, uzobona `Compare & pull request` inkinobho. Chofoza kuleyo nkinobho. + +create a pull request + +Manje thumela isicelo sokudonsa. + +submit pull request + +Ngokushesha ngizohlanganisa zonke izinguquko zakho zibe yigatsha eliyinhloko laphrojekthi. Uzothola i-imeyili yesaziso uma izinguquko sezihlanganisiwe. + +## Ungaphi lapho? + +Siyakuhalalisela! Usanda kuqedela umshini ojwayelekile -> clone -> edit -> PR ukuhamba komsebenzi ozohlangana ngaso sonke isikhathi njengomnikelo! + +Gubha umnikelo wakho bese uwabelana nabangani bakho nabalandeli ngokuya kuhlelo [lokusebenza lewebhu](https://roshanjossey.github.io/first-contributions/#social-share). + +Ungakwazi ukujoyina ithimba lethu elihle uma kwenzeka udinga noma yiluphi usizo noma unemibuzo. [Joyina ithimba le-slack](https://join.slack.com/t/firstcontributors/shared_invite/enQtMzE1MTYwNzI3ODQ0LTZiMDA2OGI2NTYyNjM1MTFiNTc4YTRhZTg4OWZjMzA0ZWZmY2UxYzVkMzI1ZmVmOWI4ODdkZWQwNTM2NDVmNjY). + +Manje ake siqale ngokunikela ngeminye imiklamo. Senze uhlu lwamaphrojekthi ngezinkinga ezilula ongaqala ngazo. Hlola [uhlu lwamaphrojekthi kuhlelo lokusebenza lewebhu .](https://roshanjossey.github.io/first-contributions/#project-list). + +### [Izinto ezengeziwe](additional-material/git_workflow_scenarios/additional-material.md) + + +## Izinto ezengeziwe + +|GitHub Desktop|Visual Studio 2017|GitKraken|VS Code| +|---|---|---|---| +|[Ideskithophu ye-GitHub](github-desktop-tutorial.md)|[I-Visual Studio 2017](github-windows-vs2017-tutorial.md)|[GitKraken](gitkraken-tutorial.md)|[Ikhodi ye-Visual Studio](github-windows-vs-code-tutorial.md)| diff --git a/translations/Translations.md b/translations/Translations.md new file mode 100644 index 00000000000..fa78be76e00 --- /dev/null +++ b/translations/Translations.md @@ -0,0 +1,59 @@ +# Translations + +| | Translated Link | +| --- | --- | +| 🇮🇳 | [ગુજરાતી](README.guj.md) | +| 🇮🇳 | [हिन्दी](README.hi.md) | +| 🇮🇳 | [मराठी](README.mr.md) | +| 🇮🇳 | [മലയാളം](README.ml.md) | +| 🇮🇳 | [తెలుగు](README.te.md) | +| 🇮🇳 🇧🇩 | [বাংলা](README.bn.md) | +| 🇮🇳 🇱🇰 | [தமிழ்](README.ta.md) | +| 🇲🇲 | [မြန်မာ](README.mm_unicode.md) | +| 🇮🇩 | [Bahasa Indonesia](README.id.md) | +| | [Català](README.ca.md) | +| 🇫🇷 | [Français](README.fr.md) | +| 🇪🇸 | [Español](README.es.md) | +| 🇳🇱 | [Nederlands](README.nl.md) | +| 🇷🇺 | [Русский язык](README.ru.md) | +| 🇧🇬 | [Bulgarian](translations/README.bg.md) | +| 🇲🇰 | [Македонски](README.mk.md) | +| 🇭🇺 | [Magyar](translations/README.hu.md) | +| :slovakia: | [Slovenčina](README.slk.md) | +| 🇯🇵 | [日本語](README.ja.md) | +| 🇻🇳 | [Tiếng Việt](README.vn.md) | +| 🇵🇱 | [Polski](README.pl.md) | +| 🇮🇷 | [فارسی](README.fa.md) | +| 🇮🇷 | [Persian_Finglish](README.fa.en.md) | +| 🇱🇹 | [Lietuvių kalba](README.lt.md) | +| 🇰🇷 🇰🇵 | [한국어](README.ko.md) | +| 🇩🇪 | [Deutsch](README.de.md) | +| 🇨🇳 🇹🇼 | [中文(Simplified)](README.chs.md), [中文(Traditional)](README.cht.md) | +| 🇬🇷 | [ελληνικά](README.gr.md) | +| العربية | [العربية](README.ar.md) | +| 🇺🇦 | [Українська](README.ua.md) | +| 🇧🇷 | [Português (Brasil)](README.pt_br.md) | +| 🇵🇹 | [Português (Portugal)](README.pt-pt.md) | +| 🇮🇹 | [Italiano](README.it.md) +| 🇹🇭 | [ภาษาไทย](README.th.md) | +| 🏴󠁥󠁳󠁧󠁡󠁿 | [Galego](README.gl.md) | +| 🇳🇵 | [नेपाली](README.np.md) | +| 🇵🇰 | [اردو](README.ur.md) | +| 🇲🇩 🇷🇴 | [Limba Română](README.ro.md) | +| :uk: | [English](../README.md) | +| | [English (Pirate)](README.en-pirate.md) | +| 🇹🇷 | [Türkçe](README.tr.md) | +| 🇮🇱 | [עברית](README.hb.md) | +| 🇲🇾 | [Bahasa Melayu / بهاس ملايو‎ / Malay](README.my.md) | +| 🇨🇿 | [Czech](README.cs.md) | +| :slovenia: | [Slovenščina](README.sl.md) | +| 🇳🇴 | [Norsk](README.no.md) | +| 🇸🇪 | [Svenska](README.se.md) | +| 🇩🇰 | [Dansk](README.da.md) | +| 🇪🇬 | [المصرية](README.eg.md) | +| 🇵🇭 | [Wikang Filipino](README.tl.md) | +| 🇰🇿 | [Қазақша](README.kz.md) | +| 🇿🇦 | [Afrikaans (South Africa)](README.afk.md) | +| 🇿🇦 | [Zulu (South Africa)](README.zul.md) | +| 🇰🇪 | [Kiswahili (Kenya)](README.kws.md) | +| 🇳🇬 | [Igbo (Nigeria)](README.igb.md) |