我在一个新项目上使用git,该项目有两个并行 - 但目前是实验性的 - 开发分支:
master:导入现有的代码库加上一些我一般都知道的mod exp1:实验分支#1exp2:实验分支#2exp1并exp2代表两种截然不同的架构方法.直到我走得更远,我无法知道哪一个(如果有的话)会起作用.当我在一个分支中取得进展时,我有时会在另一个分支中进行编辑,并且只想合并那些.
将选择性更改从一个开发分支合并到另一个开发分支而将其他所有内容合并的最佳方法是什么?
我考虑过的方法:
git merge --no-commit 然后手动取消大量编辑,我不想在分支之间做出共同点.
手动将公共文件复制到临时目录,然后git checkout移动到另一个分支,然后更多地手动从临时目录复制到工作树中.
以上的变化.暂时放弃exp分支并使用另外两个本地存储库进行实验.这使得手动复制文件更加简单.
所有这三种方法都显得乏味且容易出错.我希望有更好的方法; 类似于过滤器路径参数的东西会git-merge更具选择性.
采取这种情况:
获得这些选择的更改量的最有效方法是什么,合并到我的'fork'中?
有几次,我遇到过这样的说法:如果你将一个函数从一个文件移动到另一个文件,Git可以跟踪它.例如,这个条目说,"Linus说,如果你将一个函数从一个文件移动到另一个文件,Git会告诉你整个移动过程中单个函数的历史."
但我对Git的一些引擎盖设计有一点了解,我不知道这是怎么回事.所以我想知道......这是正确的陈述吗?如果是这样,这怎么可能?
我的理解是Git将每个文件的内容存储为Blob,每个Blob都有一个全局唯一的标识,该标识来自其内容和大小的SHA哈希.然后Git将文件夹表示为树.任何文件名信息都属于Tree,而不属于Blob,因此文件重命名例如显示为对Tree的更改,而不是Blob.
因此,如果我有一个名为"foo"的文件,其中包含20个函数,以及一个名为"bar"的文件,其中包含5个函数,我将其中一个函数从foo移动到bar(分别生成19和6), Git如何检测到我将该函数从一个文件移动到另一个文件?
根据我的理解,这将导致2个新的blob存在(一个用于修改的foo,一个用于修改的条).我意识到可以计算diff以显示函数从一个文件移动到另一个文件.但是我没有看到关于函数的历史如何可能与bar而不是foo相关联(反正不是自动的).
如果Git的是真正看里面单个的文件,并计算每个函数BLOB(这将是疯狂的/不可行的,因为你必须知道如何解析任何可能的语言),那么我可以看到这是可能的.
所以...声明是否正确?如果它是正确的,那么我理解中缺少什么?
在 TS 项目中,我希望阻止以下内容:
projectAprojectA我希望允许以下内容:
common。我知道参考文献。但是,据我了解,它们需要构建用于类型检查(如果进行了这种分离,则必须先构建以创建 d.ts 文件),我宁愿避免这种情况。
我有哪些选择?是否可以简单地通过每个项目/文件夹的单独 tsconfig 文件来实现?
我想以编程方式修改 Markdown 文件。
我一直在研究 Markdown 解析器并尝试了其中的一些;即 Marked、Markdown-it 和 Commonmark。他们允许访问 AST,这使我可以轻松修改内容。
问题是它们仅呈现为 HTML。我找不到任何有关渲染回 Markdown 的信息。
我现在看到两个选择,要么为这些库之一编写自定义渲染器(这将非常耗时),要么使用单独的工具将 HTML 转换回 Markdown。
有更简单的选择吗?为什么 Markdown 解析器只渲染为 HTML?
如何在打字稿中连接联合类型的数组?
当我尝试使用concat联合类型的数组时,出现以下错误:
该表达式不可调用。联合类型的每个成员 '{ (...items: ConcatArray<{...}>[]): { ... }[]; (...项目: ({ ... } | ConcatArray<{ ...; }>)[]): { ...; }[]; } | { ...; }' 有签名,但这些签名都不相互兼容。
CodeSandbox:https://codesandbox.io/s/modern-breeze-qt9mb?file=/src/index.ts
代码示例:
const arr1 = [
{ val1: 1, val2: 2, val3: 3 },
{ val1: 11, val2: 22, val3: 33 }
];
const arr2 = [
{ val1a: "1a", val2a: "2a", val3a: "3a" },
{ val1a: "11a", val2a: "22a", val3a: "33a" }
];
const arr3 = [
{ foo: "lfsfs", …Run Code Online (Sandbox Code Playgroud) 我有一些符合我定义的 TypeScript 接口的 JSON 文件。
大多数情况下,在导入此类 JSON 文件并将它们分配给类型化变量时,TypeScript 能够自动推断类型签名(参见behaves exactly as I want下面的代码)。但是,当类型包含字符串 enums 时,它不再起作用(请参阅参考资料DOES NOT behave)。
以下是一个工作最小、可重现的示例:
有效的.json
{ "id": 3.14159 }
Run Code Online (Sandbox Code Playgroud)
无效的.json
{ "id": "3.14159" }
Run Code Online (Sandbox Code Playgroud)
有效枚举.json
{ "color": "red" }
Run Code Online (Sandbox Code Playgroud)
无效枚举.json
{ "color": "chartreuse" }
Run Code Online (Sandbox Code Playgroud)
索引.ts
import validJson from './valid.json'
import invalidJson from './invalid.json'
import validJsonEnum from './validEnum.json'
import invalidJsonEnum from './invalidEnum.json'
type ColorType = 'red' | 'blue' | 'yellow'
type IJsonType = {"id": number}
type IJsonTypeWithEnum = …Run Code Online (Sandbox Code Playgroud) 在一台新机器上,我使用brew只安装了四个东西:git、node和。后来,当我跑步时,我被告知许多其他我没有安装的东西都是“过时的”。我跑了并得到以下信息:sqlitelessbrew updatebrew list
brotli less pcre2
c-ares libnghttp2 python@3.9
ca-certificates libuv readline
gdbm mpdecimal sqlite
gettext ncurses xz
git node
icu4c openssl@1.1
Run Code Online (Sandbox Code Playgroud)
这些是从哪里来的?如果它们是因为安装git或需要它们node而less安装的,我如何找到?
我正在运行命令git rebase --continue并收到错误:
error: update_ref failed for ref 'refs/heads/HEAD-feature': cannot lock ref 'refs/heads/HEAD-feature': is at db50dd34de1e90c0616bf9318be489ee8d9a012a but expected 83f09532b2352418c0f562f48929dc504e6a0452 error: could not update refs/heads/HEAD-feature
我查看了几个类似的问题,但没有一个答案有效。
我尝试了以下方法:
1. git update-ref -d refs/remotes/origin/HEAD-feature
2. git --no-optional-locks fetch --prune origin
3. git gc --prune=now
4. git remote prune origin
Run Code Online (Sandbox Code Playgroud)
我发现克服这个问题的唯一方法是这样做git rebase --abort,但随后我会丢失在交互式变基期间所做的所有更改。有任何想法吗?
git ×4
typescript ×3
ecmascript-5 ×1
enums ×1
git-diff ×1
git-log ×1
git-merge ×1
git-patch ×1
git-rebase ×1
goland ×1
homebrew ×1
javascript ×1
json ×1
macos ×1
markdown ×1
merge ×1
phpstorm ×1
pull ×1
pycharm ×1
webstorm ×1